CMake 3.8 發行說明

自 CMake 3.7 以來所做的變更包括以下內容。

新功能

程式語言

C#

CUDA

  • CMake 學習支援 CUDA 作為一級語言,可透過 project()enable_language() 指令啟用。

  • CUDA 目前由 Linux、macOS 和 Windows 上的 Makefile 產生器Ninja 產生器支援。對 Visual Studio IDE 的支援正在開發中,但不包含在此版本中。

  • 支援 NVIDIA CUDA 工具組編譯器 (nvcc)。

C & C++

平台

  • 新增了一個用於 Fuchsia 的新最小平台檔案。

產生器

指令

  • add_custom_command()add_custom_target() 指令學習了 COMMAND_EXPAND_LISTS 選項,該選項會導致展開 COMMAND 引數中的清單,包括由產生器運算式建立的清單。

  • execute_process() 指令取得 ENCODING 選項,以便在 Windows 上指定子處理序的輸出使用哪種編碼。

  • math(EXPR) 指令支援一元 +- 運算子。

  • source_group() 指令取得 TREEPREFIX 選項,以便依照原始程式檔樹狀目錄結構新增群組。

  • string(TIMESTAMP) 指令學習將 %% 視為編碼一般 % 的方式。

  • string(TIMESTAMP) 指令現在會遵守 SOURCE_DATE_EPOCH 環境變數,並使用其值而非目前時間。

  • try_compile() 指令原始程式檔簽章取得新選項,用於指定在產生的測試專案中使用的語言標準。

  • 現在 try_compile() 命令的原始碼檔案簽章會採用語言標準變數,如 CMAKE_CXX_STANDARD。請參閱政策 CMP0067

變數

屬性

模組

  • 新增了一個 CSharpUtilities 模組,以協助 Visual Studio C# 目標的參數化。它提供了函式來自動設定原始碼檔案屬性,以根據需要支援 Windows Forms、WPF/XAML 或其他技術。

  • ExternalData 模組學會了使用不同的雜湊值來支援一個資料檔案的多個內容連結,例如 img.png.sha256img.png.sha1。這允許從以不同雜湊演算法索引的來源擷取物件。

  • ExternalProject 模組獲得了 GIT_PROGRESS 選項,以強制 Git 在複製儲存庫時顯示進度。

  • ExternalProject 模組獲得了 GIT_CONFIG 選項,以在複製儲存庫時將 --config 選項傳遞給 Git。

  • FeatureSummary 模組的 feature_summary() 命令現在接受新的 QUIET_ON_EMPTY 選項,當屬於選定類別的套件清單為空時,該選項會抑制輸出。

  • FeatureSummary 模組的 add_feature_info() 命令現在接受相依性清單,以決定是否啟用某個功能。

  • FeatureSummary 模組接受的套件類型現在可以透過變更 FeatureSummary_PKG_TYPESFeatureSummary_REQUIRED_PKG_TYPESFeatureSummary_DEFAULT_PKG_TYPE 全域屬性進行調整。

  • FindOpenGL 模組現在在找到程式庫時,會提供匯入的目標 OpenGL::GLOpenGL::GLU

  • UseSWIG 模組獲得了 swig_add_library 命令,以便在舊的 swig_add_module 命令之上提供更大的彈性。

  • UseSWIG 模組的 swig_add_source_to_module 命令學會了一個新的 SWIG_OUTFILE_DIR 選項,以控制輸出檔案位置(swig -o)。

  • WriteCompilerDetectionHeader 模組獲得了 ALLOW_UNKNOWN_COMPILERSALLOW_UNKNOWN_COMPILER_VERSIONS 選項,這些選項允許建立標頭,這些標頭也可以與未知或舊編譯器一起使用,只需假設它們不支援任何要求的功能即可。

CTest

CPack

其他

  • 使用密碼雜湊的 CMake 功能現在支援 SHA-3 演算法。

  • 新增了新的產生器表達式 $<IF:cond,true-value,false-value>。如果條件為 1,則解析為 true-value;如果條件為 0,則解析為 false-value。

已棄用和移除的功能

其他變更

  • 如果 <LANG>_CLANG_TIDY 目標屬性指定的命令在建置時傳回非零值,現在會被視為錯誤,而不是默默地忽略。

  • ctest_memcheck() 命令不再自動將 leak_check=1 加入 AddressSanitizer 使用的選項中。 AddressSanitizer 的預設行為是執行 LeakSanitizer 來檢查記憶體洩漏,除非指定 leak_check=0

  • ctest_memcheck() 命令已修正,能正確地將從 CTEST_MEMORYCHECK_SANITIZER_OPTIONS 變數讀取的額外 sanitizers 選項附加到 sanitizers 內部使用的環境變數中。

  • FeatureSummary 模組的 set_package_properties() 命令,在未明確設定類型時,不再強制將套件類型設定為 OPTIONAL

  • 編譯功能 功能現在能識別 Intel C++ 編譯器 12.1 到 17.0 版本在 UNIX 和 Windows 平台上支援的功能。

  • 在成功呼叫後,呼叫 FindPkgConfig 模組的 pkg_check_modules() 命令,學會了在變更該前綴的命令參數後,重新評估給定前綴的快取值。

  • 當使用 AUTOMOCAUTOUIC 時,產生的 moc_**.mocui_* 會放置在 <CMAKE_CURRENT_BINARY_DIR>/<TARGETNAME>_autogen/include 目錄中,該目錄會自動新增到目標的 INCLUDE_DIRECTORIES 中。 因此,不再需要在目標的 INCLUDE_DIRECTORIES 中包含 CMAKE_CURRENT_BINARY_DIR

  • Sublime Text 2 產生器不再以啟用詳細建置輸出的方式執行原生建置命令 (例如,ninjamake)。

  • try_compile() 命令的原始檔簽名現在會在產生的測試專案中遵循 CMAKE_WARN_DEPRECATED 變數值。

  • 用於 VS 2010 及更高版本的 Visual Studio 產生器 現在會將每個原始檔的旗標放置在目標範圍旗標之後,當它們被分類為沒有專案檔案設定的原始旗標 (AdditionalOptions) 時。 此行為與其他產生器產生的旗標順序更加一致,並允許更特定屬性(每個原始檔)上的旗標覆蓋更一般屬性(每個目標)上的旗標。

  • cmake.org 上提供的預先編譯的 Windows 二進位 MSI 套件現在會在 Windows 登錄中的 HKLM\Software\Kitware\CMake 機碼下,使用名為 InstallDir 的值記錄安裝目錄。