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