使用 Scons 删除 CCFLAGS 中的标志

Remove flag in CCFLAGS with Scons

我在 Scons 中找到了替换但没有从 CCFLAGS 中删除标志的示例。例如,如果您有一个高级 SConstruct 文件,其定义为:

baseEnv.Append( CCFLAGS = [ '-Wall', '-D_FORTIFY_SOURCE=1' ])

并且您想在较低级别的 Sconscript 文件中删除该标志:

myEnv = baseEnv.Clone()
# Remove '-D_FORTIFY_SOURCE=1' flag from myEnv:CCFLAGS

你会怎么做?

如果要添加“-D_FORTIFY_SOURCE=1”,adding/setting 的 SCons 变量是通过 CPPDEFINES(参见:https://scons.org/doc/production/HTML/scons-man.html#cv-CPPDEFINES):

baseEnv.AppendUnique(CPPDEFINES=[{'_FORTIFY_SOURCE':1}])

然后您将使用以下方法将其删除:

a['CPPDEFINES'] = [ x for x in env['CPPDEFINES'] if '_FORTIFY_SOURCE' not in x]

您在 SConscript 文件中使用了如下所示的删除方法:

myEnv=baseEnv.Clone()
if '-D_FORTIFY_SOURCE=1' in myEnv['CCFLAGS']:
    myEnv['CCFLAGS'].remove('-D_FORTIFY_SOURCE=1')

我用 SCons 2.3.0 试过了,效果很好。