如何指定 gcc 标志 (CXXFLAGS) 特别是对于特定模块

How to specify gcc flags (CXXFLAGS) particularly for a specific module?

本文关键字:特别是 于特定 模块 CXXFLAGS 何指定 gcc 标志      更新时间:2023-10-16

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

我尝试这样做:CXXFLAGS="-std=c++0x" waf configure,然后构建它。 但是,事实证明,某些现有的模块(例如ipv4地址)与c++11不兼容。 因此,我想专门为我的新模块指定此标志,以便其他模块不会在 c++11 上被遵守。

我试图将其添加到新模块中的 wscript 中:

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

它作为第一次试验失败。

我该怎么做?

虽然@drahnr的答案对于原版 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']

根据 waf 书籍 1.7.8 第 10.1.1 和 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 个示例组成,根本没有经过测试。

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