使用 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 试过了,效果很好。
我在 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 试过了,效果很好。