CMake 3.12 發行說明

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

新功能

產生器

命令列

  • cmake(1) 建置專案cmake --build)新增了 --parallel [<jobs>]-j [<jobs>] 選項,以指定平行建置層級。它們對應到原生建置工具的對應選項。

命令

變數

屬性

模組

  • FindALSA 模組現在提供匯入的目標。

  • FindCURL 模組現在提供匯入的目標。

  • FindJPEG 模組現在提供匯入的目標。

  • FindLibXml2 模組現在提供匯入的目標。

  • FindMatlab 模組現在支援 Matlab Runtime Compiler (MCR),用於編譯和連結 matlab 擴充功能。

  • 新增了 FindODBC 模組,以尋找開放式資料庫連線 (ODBC) 程式庫。

  • FindPkgConfig 模組已學會匯出具有完整路徑的已找到程式庫,以便與 target_link_libraries() 命令直接使用。

  • 新增了新的 FindPython3FindPython2 模組,以及新的 FindPython 模組,以提供一種尋找 python 環境的新方法。

  • UseSWIG 模組進行了全面更新,現在與用於產生程式庫的標準 CMake 命令更加一致,並且可以透過屬性完全設定。

  • UseSWIG 模組學會透過 UseSWIG_MODULE_VERSION 變數管理多種行為,以確保舊版支援以及更穩健地處理 SWIG 進階功能(如 %template)。

  • UseSWIG 模組學會支援 CSHARP 變體包裝器檔案。

  • WriteCompilerDetectionHeader 模組新增了 BARE_FEATURES 選項,以為新語言功能的確切關鍵字新增相容性定義。

產生器表達式

  • 新增了新的 $<GENEX_EVAL:...>$<TARGET_GENEX_EVAL:target,...> 產生器表達式,以啟用對產生器表達式的使用,其評估結果本身就是產生器表達式。

  • 新增了新的 $<IN_LIST:...> 產生器表達式

  • 新增了新的 $<TARGET_EXISTS:...> 產生器表達式

  • 新增了新的 $<TARGET_NAME_IF_EXISTS:...> 產生器表達式

CTest

  • 已重新設計 ctest_start() 命令,以便您可以簡單地呼叫 ctest_start(APPEND),它將從 TAG 檔案讀取所有需要的資訊。參數解析也已放寬,因此參數的順序不太重要。

  • 新增了 PROCESSOR_AFFINITY 測試屬性,以請求 CTest 使用 CPU 親和性為一組處理器執行測試,該組處理器與設定了該屬性的其他並行執行的測試不相交。

CPack

其他

  • 編譯功能 功能現在可以識別 C++ 20。除了 cxx_std_20 元功能之外,尚未列舉任何特定功能。

  • 編譯功能 功能現在可以識別自 VS 2010 以來 MSVC 中 C 功能的可用性。

  • 編譯功能 功能現在可以識別 Texas Instruments C 編譯器支援的 C 語言標準。

已棄用和移除的功能

  • 已移除 Visual Studio 8 2005 產生器。

  • CMake 不再為函式庫目標產生 <tgt>_LIB_DEPENDS 快取條目。請參閱政策 CMP0073

其他變更

  • 標記為 SYSTEM 的目錄的包含旗標現在會移到非系統目錄之後。-isystem 旗標會自動執行此操作,因此,明確地將它們移到最後,使得在沒有任何 -isystem 旗標的編譯器上行為一致。

  • Fortran 相依性掃描現在支援 Fortran 子模組所暗示的相依性。

  • 檔案 ${CMAKE_BINARY_DIR}/cmake_install.cmake 的存在和功能現在已記錄在 install() 文件中,以便外部封裝軟體可以利用 CPack 風格的組件安裝。

  • CheckIncludeFile 模組 check_include_file 巨集學會了尊重 CMAKE_REQUIRED_LIBRARIES 變數。請參閱政策 CMP0075

  • CheckIncludeFileCXX 模組 check_include_file_cxx 巨集學會了尊重 CMAKE_REQUIRED_LIBRARIES 變數。請參閱政策 CMP0075

  • CheckIncludeFiles 模組 check_include_files 巨集學會了尊重 CMAKE_REQUIRED_LIBRARIES 變數。請參閱政策 CMP0075

  • cmake(1) -E copy_directory 工具現在當來源目錄不存在時會失敗。先前它會通過建立一個空的目標目錄而成功。

  • UseSWIG 模組 swig_add_library() 命令(以及舊版的 swig_add_module 命令)現在將 Java 模組的前綴設定為 "",適用於 MINGW、MSYS 和 CYGWIN 環境。