如何为scons指定一个目录来存储所有.o(中间)文件?

How to specify a directory for scons to store all the .o(intermediate) files?

如何指定scons存放所有.o(中间)文件的目录?

我的问题是:设置全局标志之类的东西的方法是什么,这样每个 'Object' 命令都会在 solid 目录中生成 .o 文件,而 'Program' 命令会在某些目录中生成其他目录?我不希望有一些变量,这样每个 'Object' 和 'Program' 命令都会明确地使用这个变量:它很丑陋而且耦合。我只是希望有一个编译钩子之类的东西。

例如,我有一个 testSystem.cpp,在 SConstruct 中我有:

Program('testSystem.cpp')

然后scons会先编译一个testSystem.o文件,然后link编译成testSystem可执行文件

我知道我可以明确指定二进制文件的存储位置:

Program('bin/testSystem','testSystem.cpp')

嗯,目标文件还在当前目录下。我可以做到:

testSystem_obj=Object('obj/testSystem.o','testSystem.cpp')
Program('bin/testSystem',testSystem_obj)

现在我在 ./obj 下有 .o,在 ./bin 下有可执行文件。没问题。

但是,这意味着对于每个文件,我必须手动编写 2 行,1 行告诉 scons 在 ./obj 下生成目标文件,另一行在 ./bin 下生成文件。如果我想重新组织我的整个项目,我必须修改我所有的 SConstruct/SConscript 文件。我有一个大项目,不想做这个。

有什么提示吗?如何用 scons 做到这一点?

有点。

SCons 支持 VariantDir,它允许将源代码与构建产品分开。

看看:

http://scons.org/doc/production/HTML/scons-user/ch15.html