将多个源目录构建到同一目标目录中
Build multiple source directories into the same target directory
我有一个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"
.
所以,我的问题是:如何将来自多个来源的对象文件链接到同一个变体目录中?
在您的情况下,我会让 SCons 在各自的文件夹中构建不同的二进制文件,然后使用安装构建器将二进制文件复制到bin/
目录。
你会得到类似的东西:
env = Environment()
Export('env')
common = env.SConscript("source/common/SConscript_object", variant_dir="object/common", duplicate=0)
Export('common')
prog1 = env.SConscript("source/prog1/SConscript_bin", variant_dir="object/prog1", duplicate=0)
prog2 = env.SConscript("source/prog2/SConscript_bin", variant_dir="object/prog2", duplicate=0)
env.Install('bin', prog1)
env.Install('bin', prog2)
子程序的 SConscript 类似于
Import('env')
Import('common')
prog1 = env.Program('prog1', [ env.Glob(*.cpp), common ])
Return('prog1')
我认为 SCons 拒绝将不同的目标构建到唯一的变体目录中,因为变体旨在构建具有不同构建设置(如调试和发布模式)的给定目标。
相关文章:
- 为什么构建目录中新构建的共享库与安装目录中的副本具有不同的依赖项集?
- 从不同目录执行时"symbol lookup error:",否则从构建目录执行时按预期工作
- 如何在目录及其子文件夹中构建文件名字符串向量?
- 尝试使用 MSVC 从源代码构建 qt 创建器:无法打开包含文件:"stddef.h":没有这样的文件或目录
- 如何让KDevelop & CMake只构建特定目标?
- 如何使用自动工具在单独的目录中构建
- 指定 NDK 构建的目标架构
- 通过杂注更改构建输出目录
- CMake:将文件从构建目录复制到源直接
- 在多个目标上 CMake 后期构建自定义命令?
- Cmake 使用目标target_include_directories时无法指定包含目录
- CMake:如何根据配置和架构复制不同的文件来构建目录
- 如何包括在下游目标上添加的AutouIC的目录
- 无法构建Boost Python库(致命错误:PyConfig.H:没有此类文件或目录)
- 在QT中的大型项目中指定构建/目标/安装路径
- 在构建 Android 应用程序时禁用 CMake 目标
- 将多个源目录构建到同一目标目录中
- 安装前请检查目标目录的权限
- 当尝试从使用makefile生成的目标文件构建时,c++链接器错误.在我刚建立的时候不会发生
- MakeFile目标目录