我有一个相当复杂的 scons 系统,有几个子目录,有很多库和可执行文件。目前,每个 SConscript 都有自己的克隆环境,因此我可以在每个 SConscript 的基础上轻松更改 CFLAGS (或任何其他 wariable),但我想在每个目标甚至每个对象文件中更改它目标。
我创建了一个简单的示例 SConscript 和 SConstruct 来解释问题,如下所示。
S构造:
env = Environment()
env['CFLAGS'] = '-O2'
env.SConscript('SConscript', 'env')
征兵:
Import('env')
env=env.Clone()
env.Program('foo', ['foo.c', 'bar.c'])
如果我运行 scons,则 foo.c 和 bar.c 都使用 -O2 标志进行编译。我可以通过在 SConscript 中添加来轻松更改 SConscript 范围env['CFLAGS'] = '...'
内的标志,但是假设我想-O2
用-O0 -g
. 我该怎么做(以最简单的方式)?
该示例使用 gcc,但我想要可以与任何编译器一起使用的东西。
这种情况经常发生在对性能敏感的项目中,在没有优化的情况下编译所有内容会导致不可接受的性能,但需要调试一个文件(或其中的一个子集)。