使用Scons删除CCFLAGS中的标志

时间:2018-08-10 17:38:13

标签: 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

您将如何去做?

2 个答案:

答案 0 :(得分:1)

如果要添加“ -D_FORTIFY_SOURCE = 1”,则通过CPPDEFINES来添加/设置这样的SCons变量(请参见: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]

答案 1 :(得分:1)

您可以使用如下所示的SConscript文件中的remove方法:

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

我在SCons 2.3.0上进行了尝试,效果很好。