scons在一个模块中设置CXXFLAGS会影响另一个模块

时间:2010-02-16 19:50:45

标签: c++ build-process scons

在dirA / SConscript中我有:

Import('env')
probeenv = env.Clone()
probeenv['CXXFLAGS'] +=  ['-fno-rtti','-Wnon-virtual-dtor']
... stuff that uses probeenv

在dirB / SConscript中我有

Import('env')
sipenv = env.Clone()
... stuff that uses sipenv

现在,dirB中的c ++文件被编译,从dirA获取CXXFLAGS - 怎么来的? CCFLAGS不会发生这种情况。如果我在dirA中使用probeenv['CXXFLAGS'] = ['-fno-rtti','-Wnon-virtual-dtor']

,也不会发生这种情况

3 个答案:

答案 0 :(得分:1)

有专门的方法将数据附加到各种编译器标志:

probenv.Append(CXXFLAGS = ['-fno-rtti','-Wnon-virtual-dtor'])

还有AppendUnique和AppendENVPath。见男人的描述。

答案 1 :(得分:1)

如果没有在“主”SConstruct中设置CXXFLAGS,这似乎是一个scons错误。解决方法是简单地将其设置为空列表。

SConscript:

env['CXXFLAGS'] = []

答案 2 :(得分:0)

实现这一目标的最佳方法是:

env.Prepend(CXXFLAGS = ['-fno-rtti', '-Wnon-virtual-dtor'])

像这样,您不会收到错误并且避免了解决方法,因为未设置CXXFLAGS值,它会自动创建。