目标取决于未来的未知目标

我希望我的目标取决于另一个目标,我不知道当时指定依赖目标的名称或路径。 当第二个目标由于某些原因而知道时,我不能在晚些时候使用Depends

是否有可能制作某种可以稍后设置的占位符? 我想像一样

target1 = <placeholder_of_some_sort>
target2 = Program(files + [target1])

# Set target1 later
target1 = Object(...)

然而,这不起作用,因为scons会查找占位符依赖项。

编辑:

这个例子展示了我试图解决的问题的本质。 实际上,我有一个庞大而复杂的构建系统,其中有许多SConscript文件以分层方式调用其他SConscript文件。 我根据某些用户输入生成一个或多个目标:

for x in user_input:
    targets.append(env.SConscript(daughter_sconscript))

生成的目标是彼此独立的......除了一个丑陋的边缘情况,其中根据某些用户输入,对女儿SConscript文件之一的调用之一将生成一个额外的目标文件,该文件稍后将用于另一个调用给同一个女儿SConscript文件。

生成目标的顺序取决于用户输入(用户类型scons 1 2 3 vs scons 3 2 1 ),因此不保证将附加对象描述给SCons,而对需要该对象的SConscript的调用被执行。 所以我想告诉Scons“嘿,我知道这个目标需要一个目标文件,但目前还没有描述”。

我可以在SConstruct文件中硬编码额外的目标文件的名称:

extra_object = File("path")

for x in user_input:
    targets.append(env.SConscript(daughter_sconscript, exports = {"extras": extra_object}))

但是这让我的SConstruct更加细腻。 我想尽可能保持专注,并让女儿注意照顾命名和路径。

谢谢!


首先我不会使用DefaultEnvironment(当你使用Program而不是例如env.Program()时得到的)

env=Environment()
env.Program('program_name',files + env['SOME_TARGET_NAME'])

.... later assuming shared env

env['SOME_TARGETNAME'] = env.SharedObject('fun_source.c')

这是否为你解决它? 或者你有不同的使用模式。

更常见的工作流程是创建一个库(假设这个库位于不同的目录中),然后将其与程序链接(通过名称)

顶级SConstruct:

env=Environment()
env.SConscript('program/SConscript', exports='env')
env.SConscript('other_dir/SConscript', exports='env')

程序/ SConscript:

Import('env')
env.Program('program_name',files+env['SOME_TARGET_NAME'])
or
env.Program('program_name',files,LIBPATH='#/other_dir',LIBS=['otherlib'])

other_dir / SConscript

Import('env')
env['SOME_TARGETNAME'] = env.SharedObject('fun_source.c')
or
env.StaticLibrary('otherlib',['fun_source.c'])
链接地址: http://www.djcxy.com/p/67923.html

上一篇: Make target depend on future unknown target

下一篇: Scons copy header files to build directory