【问题标题】:SCons - how to provide explicit dependency for targets across scriptsSCons - 如何为跨脚本的目标提供显式依赖
【发布时间】:2012-02-16 00:37:07
【问题描述】:

这是我的主要 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会失败并抱怨derived_src/some_file不存在.

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

【问题讨论】:

    标签: dependencies code-generation scons


    【解决方案1】:

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

    env.Depends(compile_source, gen_source)
    

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

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

    更进一步的方法是指定这些目录中的文件,可能使用 Glob()

    希望对您有所帮助。

    【讨论】:

    • 我在我的 compile.scons 文件中找到了Export() 我生成的源文件节点和Import() 这些的方法,它在正确设置依赖项的情况下按预期工作。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多