GCC版本/标志和FAM

时间:2018-01-09 12:50:33

标签: c++ gcc cmake gnu-make flexible-array-member

我试图将我们的构建系统从make移植到CMake,我遇到了一个令人惊讶的问题,那就是" Googleable" 我们的代码是C ++ 11/14,用GCC6.2编译好,make在调用GCC时应用了zillion开关,大多是迂腐警告。我构建了一个CMake系统,可以编译(GCC 6.3)大部分代码而没有问题但是由于以下原因,某些模块无法构建

  

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

除了它出现在C ++代码中的原因。为什么要在基于make的系统中编译? AFAIK,灵活的阵列不是C ++标准的一部分。 GCC具体扩展?什么命令行开关控制FAM行为?如何使其像在原始make系统中那样进行编译?

如果有人需要一段已编译的代码

struct Foo
{
    int _10;
    double _20;
    int a[];
};

struct Bar
{
    Foo foo;
    double _1;
    int _2;
}

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

  

cmake_minimum_required(VERSION 3.9)

     

项目(foo VERSION $ {FOO_VERSION} DESCRIPTION" foo")

     

设置(CMAKE_CXX_STANDARD 14)

     

设置(CMAKE_C_STANDARD 99)

     

add_executable(foo foo.cpp foo_backup.cpp main.cpp)

     

set_target_properties(foo PROPERTIES VERSION $ {PROJECT_VERSION})

     

target_include_directories(foo PUBLIC $ {CMAKE_SOURCE_DIR} / lib / include $ {CMAKE_SOURCE_DIR} / lib / include / bar)

1 个答案:

答案 0 :(得分:2)

  

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

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

请参阅compilation with 6.2compilation with 6.3

禁用迂腐编辑将删除错误,但需要其他放松。