gpt4 book ai didi

c++ - 将多个源目录构建到同一个目标目录中

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:25:47 25 4
gpt4 key购买 nike

我有一个 C++ 应用程序,我正在尝试使用 scons 构建它它由几个子程序组成。

每个子程序在源目录的子目录中都有自己的源文件。这些源文件,例如source/prog1/prog1.cpp,被编译成驻留在目标目录中的目标文件,e.e. object/prog1/prog1.o.

这很好用,因为每个源目录都有其目标目录,并且不会发生冲突。

但是,我要做的是将这些目标文件链接到可执行文件中,这些文件将位于相同的 bin 目录中。因此多个源文件(object/prog1object/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 在各自的文件夹中构建不同的二进制文件,然后使用 Install builder将二进制文件复制到 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 拒绝将不同的目标构建到一个独特的变体目录中,因为变体旨在构建具有不同build设置的给定目标,例如调试和 Release模式。

关于c++ - 将多个源目录构建到同一个目标目录中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19553939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com