我构建具有多个环境的代码,输出到多个目标目录。管理这个的自然方式似乎是变体目录。所以我可能希望使用不同的选项和不同的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_dir
和src_dir
似乎都没有得到Object
的尊重,因为两者都没有提到magic
。
我是否误解了variant_dir / src_dir的工作方式,以及使用不同目标构建同一组文件的最佳方法是什么?
答案 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)。