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) 現在會放置在此集區中。

  • 新增了一個新的 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() 指令學會遵循 LINK_LIBRARIES 選項,如同 try_compile() 已經做到的那樣。

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

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

變數

屬性

  • 引入了 ANDROID_API_MIN 目標屬性,以指定工具鏈要定位的最低版本。

  • 新增了 VS_SHADER_FLAGS 原始檔屬性,以指定 Visual Studio 產生器中 .hlsl 檔案的其他著色器旗標。

模組

  • 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 模組學會了尋找安裝在使用者主目錄中的 Windows 版 GitHub 隨附的 git 命令列工具。

  • 導入了 FindGSL 模組,用於尋找 GNU 科學函式庫。

  • 導入了 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 上適用於 4.4 到 5.0 版本的 GNU 編譯器 (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 仍然能夠為那些舊編譯器的使用者產生 Makefile 和專案檔。已知不再能夠建置 CMake 的編譯器有:

    • Visual Studio 6 和 7.0 -- 已被 Visual Studio 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 實作。作業系統設定的憑證授權單位將會自動信任。

    在其他平台上,當 CMake 使用 OpenSSL 建置時,這些命令現在會搜尋幾個 /etc 路徑中作業系統設定的憑證授權單位,以便自動信任。

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

  • Visual Studio 產生器現在以 UTF-8 而不是 Windows-1252 寫入解決方案和專案檔。Windows-1252 支援拉丁語系 1 的語言,例如北美、南美和西歐的語言。透過 UTF-8,現在支援更多語言。

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

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