我有一个C++应用程序,我正在尝试使用scons进行构建,它由几个子程序组成。
每个子程序都有自己的源文件,位于源目录的子目录中。这些源文件(例如
这很好运行,因为每个源目录都有其目标目录,并且没有冲突的可能性。
但是,我想做的是将这些对象文件链接到可执行文件中,这些可执行文件将位于同一个
目录布局如下:
我想通过以下的SConstruct脚本来实现这个目标:
然而,scons 报告了以下错误:
如果我让每个子程序在bin目录中拥有自己的目录,例如
所以,我的问题是:如何将来自多个源的对象文件链接到同一个变体目录中?
每个子程序都有自己的源文件,位于源目录的子目录中。这些源文件(例如
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"
,错误就会消失。所以,我的问题是:如何将来自多个源的对象文件链接到同一个变体目录中?