这是我的主要SConstruct文件
env = Environment()
gen_source = env.SConscript(
'generate_sources.scons',
variant_dir='derived_src', src_dir='src',
duplicate=0)
compile_source = env.SConscript('compile.scons',
variant_dir='build', src_dir='derived_src',
duplicate=0)
env.Depends('build/', 'derived_src/')
gen_source
是一个包含一个源生成器目标的脚本,它从我的源目录输出derived_src/
中的文件,而compile_source
是一个包含多个目标的脚本。
如果在命令行中没有提供目标,即运行scons
,它将生成源然后编译,但是如果提供了目标,例如scons pg_test
,则scons将失败并抱怨{{ 1}}不存在。
建立这种目标关系的最佳方法是什么?我希望改变它的行为,使它只生成将要编译的源。
答案 0 :(得分:1)
根据你从gen_source和compile_source SConscript执行中返回的内容,如果它是一个目标列表,那么我认为设置这样的依赖项会更有意义:
env.Depends(compile_source, gen_source)
或者,如果您没有返回目标列表,那么至少将目录放在相对于根SConstruct的位置,如下所示:
env.Depends('#build', '#derived_src')
更进一步的是指定那些目录中的文件,可能还有Glob()
希望有所帮助。