GCC версии / флаги и FAM

Я пытаюсь портировать нашу систему сборки с make в CMakeи я столкнулся с проблемой, которая на удивление не «Googleable» Наш код C ++ 11/14, прекрасно компилируется с GCC6.2, make применяет zillion переключатели при вызове GCC, в основном педантичные предупреждения. Я построил CMake система, которая компилирует (GCC 6.3) большую часть кода без проблем, но некоторые модули не удалось собрать из-за следующего

член гибкого массива «бла», не в конце «структуры»

Помимо того, почему это появляется в коде 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 VERSION $ {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)

0

Решение

Как мне сделать так, чтобы это компилировалось так же, как в оригинальной системе make?

Вернуться к GCC 6.2. это -pedantic ошибка была введена для C ++ в GCC 6.3.

Увидеть сборник с 6.2 а также сборник с 6.3

Отключение педантичной компиляции устранит ошибку, но повлечет за собой другие расслабления.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]