CMAKE_<LANG>_STANDARD_LATEST¶
在版本 3.30 中添加。
此变量表示由当前编译器支持的语言 <LANG>
的标准的最新版本和 CMake 支持的最新版本之间的最小版本。其值将设置为相应 <LANG>_STANDARD
目标属性支持的值之一;请参阅该属性的文档以了解支持的语言列表。
参阅 cmake-compile-features(7)
手册以了解编译特性和支持的编译器列表。
注意
CMAKE_<LANG>_STANDARD_LATEST
永不会设置为 CMake 认可但未提供任何支持的语言标准。除非另有说明,相应 <LANG>_STANDARD
目标属性支持的每个值都表示由 CMake 认可且受支持的语言 <LANG>
的标准。
检查语言标准支持¶
可以利用 CMAKE_<LANG>_STANDARD_LATEST
变量的值来检查语言标准支持。例如,它可以用来有条件地为一个分布式库启用可选特性。
这样做时,务必小心,不要依赖于标准级别之间的整数值比较。这是因为,由 CMake 支持的一些给定语言的较早标准(如,作为 98
表示的 C++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()