Я пытаюсь портировать нашу систему сборки с 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)
Как мне сделать так, чтобы это компилировалось так же, как в оригинальной системе make?
Вернуться к GCC 6.2. это -pedantic
ошибка была введена для C ++ в GCC 6.3.
Увидеть сборник с 6.2 а также сборник с 6.3
Отключение педантичной компиляции устранит ошибку, но повлечет за собой другие расслабления.
Других решений пока нет …