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