簡體   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