代码之家  ›  专栏  ›  技术社区  ›  kreuzerkrieg

GCC版本/标志和FAM

  •  0
  • kreuzerkrieg  · 技术社区  · 7 年前

    我正在尝试从 make CMake ,我遇到了一个令人惊讶的问题,它不是“Googleable” 我们的代码是C++11/14,使用GCC6.2进行良好编译 制作 调用GCC时应用大量开关,大多数是迂腐的警告。我建造了一个 CMake公司 编译(GCC 6.3)大部分代码时没有问题,但由于以下原因,某些模块未能构建的系统

    灵活的数组成员—blahblah—不在—struct—的末尾

    撇开它出现在C++代码中的原因不谈。为什么它在 制作 基于系统?好吧,灵活数组不是C++标准的一部分。GCC特定扩展?什么命令行开关控制FAM行为?如何使其像在原始版本中那样编译 制作 系统

    以防有人需要一段编译后的代码

    struct Foo
    {
        int _10;
        double _20;
        int a[];
    };
    
    struct Bar
    {
        Foo foo;
        double _1;
        int _2;
    }
    

    要添加更多上下文,请 cmake 文件

    需要cmake\U minimum\U(3.9版)

    项目(foo版本${foo\u版本}描述“foo”)

    设置(CMAKE\U CXX\U标准14)

    设置(CMAKE\U C\U STANDARD 99)

    添加\u可执行文件(foo foo.cpp foo\u backup.cpp main.cpp)

    set\u target\u属性(foo properties VERSION${PROJECT\u VERSION})

    target\u include\u目录(foo PUBLIC${CMAKE\u SOURCE\u DIR}/lib/include${CMAKE\u SOURCE\u DIR}/lib/include/bar)

    1 回复  |  直到 4 年前
        1
  •  2
  •   Mike Kinghan Luchian Grigore    7 年前

    如何使其像在原始make系统中那样编译

    恢复至GCC 6.2。这 -pedantic GCC 6.3中引入了C++错误。

    看见 compilation with 6.2 compilation with 6.3

    禁用迂腐的编译将消除错误,但会带来其他放松。