SCons - 如何跨脚本为目标提供显式依赖

时间:2012-02-16 00:37:08

标签: dependencies code-generation scons

这是我的主要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}}不存在。

建立这种目标关系的最佳方法是什么?我希望改变它的行为,使它只生成将要编译的源。

1 个答案:

答案 0 :(得分:1)

根据你从gen_source和compile_source SConscript执行中返回的内容,如果它是一个目标列表,那么我认为设置这样的依赖项会更有意义:

env.Depends(compile_source, gen_source)

或者,如果您没有返回目标列表,那么至少将目录放在相对于根SConstruct的位置,如下所示:

env.Depends('#build', '#derived_src')

更进一步的是指定那些目录中的文件,可能还有Glob()

希望有所帮助。