如何为特定模块指定gcc标志(CXXFLAGS)?

时间:2012-12-04 10:40:41

标签: c++ gcc c++11 waf

我最近正在构建一个新的NS3模块。在我的代码中,我使用了C++11 (c++0x)的一些新功能,我想在"-std=c++0x"配置系统中添加一个gcc标志(CXXFLAGS)waf

我尝试了这个:CXXFLAGS="-std=c++0x" waf configure,然后构建它。但是,事实证明,某些现有模块(如ipv4-address)与c++11不兼容。因此,我想特别为我的新模块指定此标志,以便其他模块不会在c ++ 11上得到编译。

我尝试将此添加到 my new module 中的wscript:

def configure(conf):
    conf.env.append_value('CXXFLAGS', '-std=c++0x')

第一次试验失败了。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

根据waf book 1.7.8, section 10.1.1 and 10.1.2

    bld.shlib(source='main.c',
            target='myshlib',
            cflags       = ['-O2', '-Wall'], 
            cxxflags     = ['-O3', '-std=c++0x'],
            use          = 'myobjects')

    bld.objects(source='ip4.c',
            cflags       = ['-O2', '-Wall'], 
            cxxflags     = ['-std=somethingelse'],
            target       = 'myobjects')

注意#1 - 此代码由wafbook中提供的2个示例和 not 进行测试。

注意#2 - 您可能需要让waf知道生成的“myobjects”,或者它们可能不会用于构建“myshlib”,因为waf会在构建之前索引所有文件

答案 1 :(得分:1)

尽管@ drahnr的答案对于vanilla waf是正确的,但它不适用于NS-3的构建系统,这显然是OP想要的。要将CXXFLAGS添加到NS-3程序,可以将它们添加到构建对象而不是配置阶段。

例如:

def build(bld):   
    obj = bld.create_ns3_program('my_app', ['core', 'other-dependencies'])
    obj.source = 'MyApplication.cpp'
    obj.cxxflags = ['-std=c++11']