Spec-Zone.ru › CMake 3.30

CMAKE__STANDARD_LATEST

Новое в версии 3.30.

Эта переменная представляет собой минимальное значение между последней версией стандарта языка <LANG>, поддерживаемой текущим компилятором, и последней версией, поддерживаемой CMake. Её значение будет установлено на одно из поддерживаемых значений соответствующего свойства целевого объекта <LANG>_STANDARD; список поддерживаемых языков см. в документации этого свойства.

См. руководство cmake-compile-features(7) для информации о функциях компиляции и списке поддерживаемых компиляторов.

Примечание

CMAKE_<LANG>_STANDARD_LATEST никогда не будет установлено на стандарт языка, который CMake распознаёт, но не поддерживает. Если не указано иное, каждое поддерживаемое значение соответствующего свойства целевого объекта <LANG>_STANDARD представляет собой стандарт языка <LANG>, который одновременно распознаётся и поддерживается CMake.

Проверка поддержки стандарта языка

Можно использовать значение переменной CMAKE_<LANG>_STANDARD_LATEST для проверки поддержки стандарта языка. Это может пригодиться, например, для условной активации дополнительных функций для распределённой библиотеки.

При этом следует быть осторожным и не полагаться на сравнение целочисленных значений уровней стандарта. Это связано с тем, что некоторые более старые стандарты данного языка, поддерживаемые CMake (например, C++98, представленный как 98), будут иметь более высокое числовое значение, чем более новые стандарты того же языка.

Следующий фрагмент кода демонстрирует, как правильно проверить поддержку C++17:

# Careful! We cannot do direct integer comparisons with
# CMAKE_CXX_STANDARD_LATEST because some earlier C++ standards (e.g.,
# C++98) will have a higher numerical value than our requirement (C++17).
#
# Instead, we keep a list of unsupported C++ standards and check if
# CMAKE_CXX_STANDARD_LATEST appears in that list.
set(UNSUPPORTED_CXX_STANDARDS
  98
  11
  14
)

list(FIND UNSUPPORTED_CXX_STANDARDS ${CMAKE_CXX_STANDARD_LATEST} UNSUPPORTED_CXX_STANDARDS_INDEX)

if(UNSUPPORTED_CXX_STANDARDS_INDEX EQUAL -1)
  # We know that the current compiler supports at least C++17. Enabling
  # some optional feature...
else()
  message(STATUS
    "Feature X is disabled because it requires C++17, but the current "
    "compiler only supports C++${CMAKE_CXX_STANDARD_LATEST}."
  )
endif()

© 2000–2024 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.30/variable/CMAKE_LANG_STANDARD_LATEST.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API