我在Scons中找到了替换但未从CCFLAGS中删除标志的示例。例如,如果您有一个带有定义的高级SConstruct文件:
baseEnv.Append( CCFLAGS = [ '-Wall', '-D_FORTIFY_SOURCE=1' ])
您想在较低级别的Sconscript文件中删除该标志:
myEnv = baseEnv.Clone()
# Remove '-D_FORTIFY_SOURCE=1' flag from myEnv:CCFLAGS
您将如何去做?
答案 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上进行了尝试,效果很好。