0

我正在尝试将我们的构建系统从 移植makeCMake,但我遇到了一个令人惊讶的问题,该问题令人惊讶地无法“Googleable” 我们的代码是 C++ 11/14,可以使用 GCC6.2 编译,make调用 GCC 时应用了无数个开关,主要是迂腐警告。我构建了一个CMake系统,可以毫无问题地编译(GCC 6.3)大部分代码,但由于以下原因,某些模块无法构建

灵活的数组成员 'blahblah' 不在 'struct' 的末尾</p>

除了它出现在 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(版本 3.9)

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

设置(CMAKE_CXX_STANDARD 14)

设置(CMAKE_C_STANDARD 99)

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

set_target_properties(foo 属性版本 ${PROJECT_VERSION})

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

4

1 回答 1

2

如何使它像在原始 make 系统中一样编译

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

参见6.2编译和6.3 编译

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

于 2018-01-09T15:49:31.523 回答