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