目标取决于未来的未知目标
我希望我的目标取决于另一个目标,我不知道当时指定依赖目标的名称或路径。 当第二个目标由于某些原因而知道时,我不能在晚些时候使用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