与源文件不同目录中的 SConscript

SConscript in different directory to source files

我正在使用多个环境构建代码,输出到多个目标目录。管理这个的自然方法似乎是使用变体目录。所以我可能想用不同的选项和不同的 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 的工作原理,以及构建具有不同目标的同一组文件的最佳方法是什么?

您的 file/folder 层次结构不符合 SConstruct/SConscript 文件中的构建规范。 请注意 SCons 中的文件路径通常是如何相对于当前 SConscript 的位置的,因此:

source = 'test.cpp'
env.Object(source)

in 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.) 请查看用户指南 (http://www.scons.org/doc/production/HTML/scons-user.html) 中的第 14 章 "Hierarchical Builds"。