在 scons 中设置编译器特定的标志

Setting compiler specific flags in scons

在编写将在不同平台和编译器上使用的 scons 脚本时,有时需要添加特定于编译器的标志。伪代码中的 Fx

if using_gcc:
    env.Append( CCFLAGS=["-g"] )
elif using_msvc:
    env.Append( CCFLAGS=["/Zi"] )

在早些时候,我只是复制了 Tools 下适当的 (?) .py 文件并修改了这些文件并放置在 site_tools 下,但这似乎是一个 hackish 解决方案。

有没有更好的方法来实现这个结果?如果可以在 site_scons 下添加它以产生全局效果(而不必自己破解工具文件)当然会很好。

注意:我觉得在 site_scons 下这样做是可取的,因为它可以作为在多个项目之间共享的公共构建系统的一部分来完成。当然,这意味着也必须在项目的所有参与者之间共享这个构建系统。

我利用 SCons 在 OSX、Winders 和 Linux 上构建,使用相同的脚本,并且通常像这样处理依赖于平台的标志。

import platform
env = Environment()
env['SYSTEM'] = platform.system().lower()

if env['SYSTEM'] in ['linux', 'darwin']:
    env.Append( CCFLAGS=["-g"] )
if env['SYSTEM'] == 'windows':
    env.Append( CCFLAGS=["/Zi"] )

我将系统添加为环境变量,因为它通常会出现多次,而且随处可用很方便。

请注意,当您混合使用工具链、构建模式和其他有趣的选项时,此逻辑通常会变得更加复杂。

我尽量不使用 site_scons、用户环境变量或任何点文件来修改构建环境。我发现将整个环境规范定义在一个地方并保证(尽可能最好地)对所有平台上的所有用户都相同更有用。