GCC & Cmake: не использовать новые функции - PullRequest
0 голосов
/ 03 июня 2019

Я пытаюсь скомпилировать код с 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, чтобы запретить новые языковые функции?

...