Есть ли способ запретить «экспериментальный» C ++ 17 в конфигурации CMake? - PullRequest
2 голосов
/ 11 октября 2019

Я установил следующее в моем CMakeLists.txt:

set (CMAKE_CXX_STANDARD 17)
set (CMAKE_CXX_STANDARD_REQUIRED ON)
set (CMAKE_CXX_EXTENSIONS OFF)

Однако CMake по-прежнему допускает g ++ 6, даже если он не полностью поддерживает c ++ 17 (у него есть c ++Стандарт 1z, но не стандарт с ++ 17). Есть ли способ указать CMake разрешить только компиляторам, которые полностью поддерживают стандарт, а не только его части?

FWIW, я также пытался установить cxx_relaxed_constexpr, который, я думаю, должен был быть соответствующей языковой функцией, но все же допускал g ++ 6. Но он явно не может скомпилировать код, такой как

if constexpr (ENABLE_LOGGING) { do_loggy_stuff() };

Так что я не уверен, есть ли новая функция constexpr, которую я должен искать (в последней версии cmake ее нет) или CMake просто не понимает, что может делать GCC 6.

Редактировать: Кажется, я был немного смущен. Хотя GCC 6 не документирует c ++ 17 как значение -std, он принимает его как синоним c ++ - 1z. Поэтому я думаю, что мне нужен способ поиска «неэкспериментальной» поддержки c ++ 17.

Также, глядя на документацию GCC, мне кажется, что мне нужна функция «constexpr». если". К сожалению, CMake не распознает cxx_constexpr_if или cxx_if_constexpr как допустимые функции компиляции.

...