我有一个C++应用程序,我试图用scons构建,它由几个子程序组成。构建多个源目录到相同的目标目录中
每个子程序在源目录的子目录中都有自己的源文件。这些源文件,例如source/prog1/prog1.cpp
)被编译成驻留在对象目录e.e中的目标文件。 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目录中的ectory,例如variant_dir="bin/prog1"
。
所以,我的问题是这样的:如何将多个源的目标文件链接到同一个变体目录中?
我能够重现此行为。我尝试将一个调用与VariantDir()与SConscript()结合起来,并得到同样的问题。我无法解释它,但似乎SCons不喜欢一个独特的variant_dir的多个源代码目录。您可以尝试在SCons用户的群组邮件列表上询问:[email protected] – Brady