【发布时间】:2013-11-02 10:51:37
【问题描述】:
我有一个 C++ 应用程序,我正在尝试使用 scons 构建它,它由几个子程序组成。
每个子程序在源目录的子目录中都有自己的源文件。这些源文件,例如source/prog1/prog1.cpp,被编译成驻留在对象目录中的对象文件,例如object/prog1/prog1.o.
这很好,因为每个源目录都有其目标目录,并且没有冲突的可能性。
但是,我正在尝试将这些目标文件链接到可执行文件中,这些可执行文件将位于同一 bin 目录中。所以多个源文件(object/prog1、object/prog2 等)都会进入同一个目标目录(bin)。
目录布局如下:
application
source
prog1
prog1.cpp
something.cpp
prog2
prog2.cpp
somethingelse.cpp
object
prog1
prog1.o
something.o
prog2
prog2.o
somethingelse.o
bin
??? <- what I'm concerned with
我正在尝试使用以下 SConstruct 脚本来实现:
env = Environment()
Export('env')
#common objects
common=env.SConscript("source/common/SConscript_object", variant_dir="object/common", duplicate=0)
Export('common')
#sub-programs
env.SConscript("source/prog1/SConscript_bin", variant_dir="bin", duplicate=0)
env.SConscript("source/prog2/SConscript_bin", variant_dir="bin", duplicate=0)
但是,scons 抱怨以下错误:
scons: *** 'bin' already has a source directory: 'source/prog1'.
如果我让每个子程序在 bin 目录中都有自己的目录,错误就会消失,例如variant_dir="bin/prog1".
所以,我的问题是:如何将多个来源的目标文件链接到同一个变体目录?
【问题讨论】:
-
我能够重现这种行为。我尝试将对 VariantDir() 的调用与 SConscript() 结合起来,并遇到了同样的问题。我无法解释它,但似乎 SCons 不喜欢多个源目录来获取唯一的 variant_dir。您可以尝试在 SCons 用户的组邮件列表中询问:Scons-users@scons.org
标签: c++ build linker scons directory-structure