我试图将我们的构建系统从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)
答案 0 :(得分:2)
如何使其像在原始make系统中那样进行编译
恢复为GCC 6.2。在GCC 6.3中为C ++引入了-pedantic
错误。
请参阅compilation with 6.2和compilation with 6.3
禁用迂腐编辑将删除错误,但需要其他放松。