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()