CMAKE_<LANG>_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.31/variable/CMAKE_LANG_STANDARD_LATEST.html