CMake 3.2 發行說明

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

新功能

語法

  • CMake 學會支援 Windows 上以 UTF-8 編碼 的 Unicode 字元。這在系統 API 接受 UTF-8 編碼字串的平台上已經支援。Unicode 字元現在可以用於 CMake 程式碼、原始檔路徑、已配置檔案(例如 .h.in 檔案)以及 CMake 讀取和寫入的其他檔案中。請注意,由於 CMake 與許多其他工具互動操作,因此在使用某些 Unicode 字元時可能仍然存在一些限制。

命令

  • add_custom_command()add_custom_target() 命令學習了一個新的 BYPRODUCTS 選項,用於指定作為自訂命令副作用產生的檔案。這些不是輸出,因為它們不一定總是比輸入更新。

  • add_custom_command()add_custom_target() 命令學習了一個新的 USES_TERMINAL 選項,用於請求在可能的情況下,讓命令直接存取終端機。Ninja 產生器會將此類命令放置在 console pool 中。CMake 提供的、旨在供個人互動使用的建置目標(例如 install)現在也放置在這個 pool 中。

  • 新增了一個 continue() 命令,可以在迴圈環境中呼叫,以結束目前的迭代並從迴圈區塊的頂端開始下一次迭代。

  • 建立了 file(LOCK) 子命令,允許 CMake 程序透過檔案和目錄鎖定來同步。

  • file(STRINGS) 現在支援 UTF-16LE、UTF-16BE、UTF-32LE、UTF-32BE 作為 ENCODING 選項。

  • install(EXPORT) 命令現在可以與絕對 DESTINATION 搭配使用,即使匯出集合中的目標是使用相對於安裝前綴的目的地或 使用需求 安裝的。CMAKE_INSTALL_PREFIX 變數的值被硬編碼到已安裝的匯出檔案中,作為相對參考的基礎。

  • try_compile() 命令原始檔簽章現在會在產生的測試專案中遵守連結旗標(例如 CMAKE_EXE_LINKER_FLAGS)。請參閱政策 CMP0056

  • try_run() 命令學會了像 try_compile() 一樣,遵守 LINK_LIBRARIES 選項。

  • file(GENERATE) 命令現在會以與輸入檔案相同的權限產生輸出檔案(如果已設定)。

  • file(GENERATE) 命令現在可以產生用作建置系統目標原始檔的檔案。產生的檔案會自動將其 GENERATED 屬性設定為 TRUE

變數

屬性

  • 引入了 ANDROID_API_MIN 目標屬性,用於指定工具鏈要針對的最低版本。

  • 新增了 VS_SHADER_FLAGS 原始檔屬性,用於為 Visual Studio 產生器中的 .hlsl 檔案指定額外的 shader 旗標。

模組

  • ExternalData 模組學會支援 自訂擷取腳本。這允許專案指定自訂的 .cmake 腳本,用於在建置期間擷取資料物件。

  • ExternalProject 模組學習了建立獨立的外部專案步驟目標的選項,這些目標不依賴於內建步驟。

  • ExternalProject 模組 ExternalProject_Add() 命令學習了一個新的 CMAKE_CACHE_DEFAULT_ARGS 選項,用於初始化外部專案中的快取值,而無需在未來的建置中設定它們。

  • ExternalProject 模組 ExternalProject_Add() 命令學習了一個新的 TEST_EXCLUDE_FROM_MAIN 選項,用於將測試從主要建置中排除。

  • ExternalProject 模組 ExternalProject_Add() 命令學習了一個新的 UPDATE_DISCONNECTED 選項,用於避免從版本控制自動更新原始碼樹簽出。

  • FindCUDA 模組了解了 CUDA 7.0 中的 cusolver 函式庫。

  • FindGit 模組學會尋找與安裝在使用者主目錄中的 GitHub for Windows 一起提供的 git 命令列工具。

  • 引入了 FindGSL 模組,用於尋找 GNU Scientific Library。

  • 引入了 FindIntl 模組,用於尋找 Gettext libintl 函式庫。

  • FindLATEX 模組學會支援組件。

  • FindMPI 模組學會尋找 Windows 上的 MS-MPI。

  • FindOpenSSL 模組現在分別在 OPENSSL_CRYPTO_LIBRARYOPENSSL_SSL_LIBRARY 中報告 cryptossl 函式庫,以允許應用程式連結到其中一個,而無需連結到另一個。

  • WriteCompilerDetectionHeader 模組學會為 cxx_thread_local 功能的可移植性建立定義。此定義會展開為 C++11 thread_local 關鍵字,或適當的預標準化編譯器特定等效項。

  • WriteCompilerDetectionHeader 模組學會為每個編譯器和每種語言建立多個輸出檔案,而不是建立一個大型檔案。

CTest

CPack

其他

  • cmake(1) -E tar 命令現在支援使用 J 旗標建立 .xz 壓縮封存檔。

  • cmake(1) -E tar 命令學習了一個新的 --files-from=<file> 選項,用於使用檔案中的行指定檔案名稱,以克服命令列長度限制。

  • cmake(1) -E tar 命令學習了一個新的 --mtime=<date> 選項,用於指定 tarball 條目中記錄的修改時間。

  • 編譯功能 功能現在意識到更多編譯器支援的功能,包括

    • 適用於 Xcode 版本 4.4 至 6.1 的 Apple Clang (AppleClang)。

    • UNIX 和 Apple 上的 GNU 編譯器版本 4.4 至 5.0 (GNU)。

    • 適用於 2010 至 2015 版本的 Microsoft Visual Studio (MSVC)。

    • Oracle SolarisStudio (SunPro) 版本 12.4。

  • AUTORCC 功能現在追蹤 .qrc 檔案中列出的檔案作為依賴項。如果 rcc 工具的輸入檔案已變更,則該工具會自動重新執行。

新的診斷訊息

  • break() 命令現在拒絕在迴圈環境之外的呼叫,或將引數傳遞給命令的呼叫。請參閱政策 CMP0055

已棄用和移除的功能

  • cmake-language(7) 撰寫的檔案(例如 CMakeLists.txt*.cmake 檔案)現在預期以 UTF-8 編碼。如果檔案已經是 ASCII,它們將相容。如果檔案採用不同的編碼(包括 Latin 1),則需要轉換。

  • FindOpenGL 模組不再使用 FindX11 模組明確搜尋對 X11 函式庫的任何依賴項。此類依賴項不應需要明確。使用 X11 API 本身的應用程式應明確尋找並連結到 X11 函式庫。

  • CMake 的實作現在依賴於一些較舊的編譯器不支援的 C++ 編譯器功能。因此,這些舊編譯器無法再用於建置 CMake 本身。但是,CMake 仍然能夠為這些舊編譯器的使用者產生 Makefiles 和專案檔案。已知不再能夠建置 CMake 的編譯器有

    • Visual Studio 6 和 7.0 -- 已被 VisualStudio 7.1 和更新版本取代。

    • GCC 2.95 -- 已被 GCC 3 和更新版本的編譯器取代。

    • Borland 編譯器 -- 已被其他 Windows 編譯器取代。

    • Compaq 編譯器 -- 已被其他編譯器取代。

    • SGI 編譯器 -- IRIX 已被刪除作為主機平台。

其他變更

  • 在 Windows 和 OS X 上,支援透過 https 進行網路通訊的命令(例如 file(DOWNLOAD)file(UPLOAD)ctest_submit())現在即使在 CMake 不是針對 OpenSSL 建置的情況下也支援 SSL/TLS。預設情況下會使用 Windows 或 OS X 原生 SSL/TLS 實作。OS 配置的憑證授權單位將自動受到信任。

    在其他平台上,當 CMake 是使用 OpenSSL 建置時,這些命令現在會在一些 /etc 路徑中搜尋 OS 配置的憑證授權單位,以便自動信任。

  • 在具有 Makefile 和 Ninja 產生器的 OS X 上,當在 /usr/bin 中找到編譯器時,它現在會對應到 Xcode 應用程式資料夾內的相應編譯器(如果有的話)。這允許此類建置樹即使在 xcode-select 切換到不同的 Xcode 安裝時,也能繼續使用其原始編譯器。

  • Visual Studio 產生器現在以 UTF-8 而不是 Windows-1252 寫入解決方案和專案檔案。Windows-1252 支援 Latin 1 語言,例如在北美、南美和西歐找到的語言。使用 UTF-8,現在支援其他語言。

  • Xcode 產生器不再需要預先找到 CMAKE_MAKE_PROGRAM 變數的值。它現在會在建置時需要時找到 xcodebuild

  • 當使用 SolarisStudio 12 建置 CMake 本身時,預設的 libCStd 標準函式庫不足以建置 CMake。SolarisStudio 發行版支援使用 STLPort4libstdc++ 的編譯器選項。現在,當使用 SolarisStudio 編譯器建置 CMake 時,會自動新增適當的選項來選擇標準函式庫。