Я пытаюсь скомпилировать код с GCC и CMake. В файле CMakeLists.txt я устанавливаю целевые свойства следующим образом:
set_target_properties(${example_name} PROPERTIES
CXX_STANDARD 14
CXX_STANDARD_REQUIRED YES
CXX_EXTENSIONS NO
)
Я хотел бы знать, как можно заставить Cmake / Gcc использовать только функции, доступные в C ++ 14, и ничего более нового. Я хотел бы ошибку времени компиляции (не предупреждение). Причина, по которой я этого хочу, заключается в том, что мне в конечном итоге потребуется перенести этот код на другую систему с компилятором, который поддерживает только C ++ 14.
Чтобы проверить вышесказанное, я добавлю некоторые очевидные особенности C ++ 17:
namespace bob::hope {
void bar() {
if constexpr (true) {
return;
}
}
}
Но вместо того, чтобы дать мне ошибку, он просто выдает предупреждение. В частности, если я включу некоторые предупреждения:
add_compile_options(-Wall -Wextra -Wpedantic)
тогда я получу
warning: nested namespace definitions only available with -std=c++1z or -std=gnu++1z [-Wpedantic]
warning: ‘if constexpr’ only available with -std=c++1z or -std=gnu++1z
Но в противном случае код компилируется без ошибок.
Так, как я могу настроить Cmake, чтобы запретить новые языковые функции?