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