scons:对象,源,可执行文件,所有这些都在不同的目录中

时间:2013-10-21 20:57:27

标签: c++ python build compilation scons

我是scons的新手,我设法弄清楚如何将一个(con)脚本生成的二进制文件(可执行文件+对象)重定向到另一个目录。

在我的主项目目录(root)中,我有一个SConstruct文件,其中包含以下行:

SConscript("source/SConscript", variant_dir="bin")

很明显,它将source/SConscript脚本的构建(变体)目录设置为bin

source/SConscript

common = []

env = Environment()
env.Program("test", ["test.cpp"] + common)
env.Program("sdl-test", ["sdl_test.cpp"] + common, LIBS=["SDL2"])

我当前的设置不及想法......

我希望所有目标文件都以object结尾,将所有源文件保存在source中,并在bin目录中构建最终的程序二进制文件。

我如何用scons实现这一目标? (最好不要使用命令式(常规)Python,我希望这是一个内置功能。)

1 个答案:

答案 0 :(得分:1)

你可以通过为你将variant_dir设置到不同目录的对象添加另一个SConscript脚本来实现,它看起来像这样:

<强> SConstruct

env = Environment()
SConscript('source/SConscript_obj', variant_dir='object',
           duplicate=0, exports='env')
SConscript('source/SConscript', variant_dir='bin',
           duplicate=0, exports='env')

<强>源/ SConscript_obj

Import('env')

env.Object("test.cpp")
env.Object("sdl_test.cpp")

<强>源/ SConscript

Import('env')

env.Program("test", ["#/object/test.o"])
env.Program("sdl-test", ["#/object/sdl_test.o"], LIBS=["SDL2"])

或者,在SConscript_obj中,您可以创建一个库,而不仅仅是编译对象。

您还可以考虑在现有的SConscript中添加对VariantDir的调用,但我不确定它的效果如何。