SConscript在不同目录下的源文件

时间:2015-11-02 15:17:28

标签: scons

我构建具有多个环境的代码,输出到多个目标目录。管理这个的自然方式似乎是变体目录。所以我可能希望使用不同的选项和不同的VariantDirs多次构建同一组文件。所以我希望能够在不同的位置拥有多个SConscript文件,所有这些文件都返回同一个源目录。

我尝试过的一个选择是:

SConstruct
src/test.cpp
src/magic/SConscript

这是我的SConstruct:

env = Environment()

SConscript('src/magic/SConscript',
    variant_dir = 'build/src',
    src_dir = 'src',
    exports={'env':env},
    duplicate=0)

这是src / magic / SConscript:

Import('env')

source = 'test.cpp'

env.Object(source)

我得到了这个输出:

scons: *** [build/src/magic/test.o] Source `src/magic/test.cpp' not found, needed by target `build/src/magic/test.o'.

variant_dirsrc_dir似乎都没有得到Object的尊重,因为两者都没有提到magic

我是否误解了variant_dir / src_dir的工作方式,以及使用不同目标构建同一组文件的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

您的文件/文件夹层次结构不适合SConstruct / SConscript文件中的构建规范。 请注意SCons中的文件路径通常是相对于当前SConscript的位置的,所以:

source = 'test.cpp'
env.Object(source)
src/magic/SConscript中的

扩展为src/magic/test.cpp ...显然不存在。您可以使用../test.cpp作为文件名,或直接将SConscript从src/magic移到src文件夹。

进一步评论:

1。)在SConscript调用中指定SConscript文件名称的路径时:

SConscript('src/SConscript',
    variant_dir = 'build',
    exports={'env':env},
    duplicate=0)

SCons将自动从第一个参数的路径派生src_dir参数。

2。)请查看第14章"分层构建"在UserGuide中(http://www.scons.org/doc/production/HTML/scons-user.html)。