CMake 3.16 發行說明

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

新功能

程式語言

  • CMake 學會支援 Objective C (OBJC) 和 Objective C++ (OBJCXX) 程式語言。它們可以透過 project()enable_language() 命令啟用。當啟用 OBJCOBJCXX 時,分別帶有 .m.mm 副檔名的原始程式碼檔案將會被編譯為 Objective C 或 C++。否則,它們將會像以前一樣被視為純 C++ 原始程式碼。

編譯器

  • 現在在 Solaris 上支援 Clang 編譯器。

平台

  • 在 AIX 上,使用 ENABLE_EXPORTS 目標屬性的可執行檔現在除了可執行檔之外,還會產生一個帶有 .imp 副檔名的連結器匯入檔。使用 add_library()MODULE 選項建立的外掛程式,使用 target_link_libraries() 連結到可執行檔以取得其符號,現在使用匯入檔進行連結。install(TARGETS) 命令現在會將匯入檔安裝為 ARCHIVE 成品。

  • 在 AIX 上,預設不再啟用執行階段連結。CMake 提供連結器足夠的資訊來預先解析所有符號。可以透過將 -Wl,-G 新增到它們的連結旗標(例如在 CMAKE_SHARED_LINKER_FLAGSCMAKE_MODULE_LINKER_FLAGS 變數中)來手動啟用共享程式庫和/或可載入模組的執行階段連結。可以透過將 -Wl,-brtl 新增到它們的連結旗標(例如在 CMAKE_EXE_LINKER_FLAGS 變數中)來手動啟用可執行檔的執行階段連結。

命令列

  • cmake(1) -E 現在支援 truefalse 命令,它們在分別回傳 0 和 1 的結束代碼時不執行任何動作。

  • cmake(1) 獲得一個 --trace-redirect=<file> 命令列選項,可用於將 --trace 輸出重新導向到檔案,而不是 stderr

  • cmake(1) --loglevel 命令列選項已重新命名為 --log-level,使其與其他命令列選項的命名一致。仍然支援 --loglevel 選項以保留回溯相容性。

命令

變數

屬性

模組

Autogen

  • 當使用 AUTOMOC 時,可以啟用新的 CMAKE_AUTOMOC_PATH_PREFIX 變數或 AUTOMOC_PATH_PREFIX 目標屬性,為 moc 產生 -p 路徑前綴選項。這確保了在不同的建置設定上,moc 輸出檔案是相同的(假設由 moc 編譯的標頭位於 include directory 中)。此外,它還確保當原始碼和/或建置目錄是符號連結時,moc 輸出檔案能夠正確編譯。

CTest

CPack

已棄用和移除的功能

其他變更

  • cmake(1) -C <initial-cache> 選項現在使用設定為最上層原始碼和建置樹的 CMAKE_SOURCE_DIRCMAKE_BINARY_DIR 來評估初始快取指令碼。

  • 當給定一個指向目錄的符號連結路徑時,cmake(1) -E remove_directory 命令列工具現在只會移除符號連結。它不再移除連結目錄的內容。

  • ctest(1) --build-makeprogram 命令列選項現在指定在使用 Ninja 產生器或 Makefile 產生器 設定專案時使用的 make 程式。

  • ExternalProject 模組的 ExternalProject_Add() 命令已更新,以便 GIT_SUBMODULES "" 不會初始化子模組。請參閱政策 CMP0097

  • 已更新 FindGTest 模組以識別由 GTest 1.8.1 產生的 MSVC 建置樹。

  • project() 命令不再移除版本元件中的前導零。請參閱政策 CMP0096

  • Qt 壓縮說明檔案現在命名為 CMake.qch,其中不再包含檔案名稱中的發行版本。當 CMake 就地升級時,此檔案的名稱和位置將保持不變。IDE、說明檢視器等工具現在應該能夠在一個固定的位置引用此檔案,該位置在 CMake 升級時仍然有效。

  • RPATH 條目在用於安裝的產生 CMake 指令碼中會正確逸出。請參閱政策 CMP0095

  • 在 Windows 上使用 CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS 時,僅當提供符號的物件檔案更新時,才會更新自動產生的匯出。

更新

自 CMake 3.16.0 以來進行的變更包括下列內容。

3.16.2

  • CMake 3.16.0 和 3.16.1 使用 AUTOMOC 處理 .hh 檔案。這是與 CMake 3.15 及更低版本相比的行為變更,可能會破壞現有專案,因此已在 3.16.2 中還原。

3.16.5

  • FindPythonFindPython2FindPython3 模組不再為 Python{,2,3}_LIBRARY_RELEASEPython{,2,3}_LIBRARY_DEBUG 建立快取項目。這些值始終從其他結果計算得出,因此不應快取。這些項目由 CMake 3.16.0 至 3.16.4 建立,但始終為 FORCE 設定,且使用者無法有意義地編輯。

    此外,這些模組不再公開其內部 _Python* 快取項目。CMake 3.16.0 至 3.16.4 意外地使其顯示為進階快取項目。

3.16.7

3.16.9

  • CMAKE_AUTOMOC_PATH_PREFIX 的預設值已變更為 OFF,因為此功能可能會破壞在不同包含目錄中具有相同名稱的標頭檔的現有專案。 這恢復了與 CMake 3.15 及更早版本的行為的相容性。