繁体   English   中英

GCC版本/标志和FAM

[英]GCC versions/flags and FAM

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

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

除了它为什么出现在C ++代码中。 为什么要在基于make的系统中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 PROPERTIES VERSION $ {PROJECT_VERSION})

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

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

恢复到GCC 6.2。 这个-pedantic错误是在GCC 6.3中针对C ++引入的。

请参见使用6.26.3进行编译

禁用脚步编译将消除错误,但需要进行其他放松。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM