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 支援的舊語言標準(例如,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()