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
。
變數¶
引入了
CMAKE_MATCH_COUNT
變數,用於記錄在if()
命令或string()
命令中,上次正規表示式比對中比對到的次數。
屬性¶
引入了
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
模組,用於尋找 Gettextlibintl
函式庫。FindLATEX
模組學會支援組件。FindMPI
模組學會尋找 Windows 上的 MS-MPI。FindOpenSSL
模組現在分別在OPENSSL_CRYPTO_LIBRARY
和OPENSSL_SSL_LIBRARY
中報告crypto
和ssl
函式庫,以允許應用程式連結到其中一個,而無需連結到另一個。WriteCompilerDetectionHeader
模組學會為cxx_thread_local
功能的可移植性建立定義。此定義會展開為 C++11thread_local
關鍵字,或適當的預標準化編譯器特定等效項。WriteCompilerDetectionHeader
模組學會為每個編譯器和每種語言建立多個輸出檔案,而不是建立一個大型檔案。
CTest¶
ctest_coverage()
命令學會支援 Delphi 覆蓋率。ctest_coverage()
命令學會支援 Javascript 覆蓋率。引入了
CTestCoverageCollectGCOV
模組,作為ctest_coverage()
命令的替代方案,用於收集gcov
結果以提交到 CDash。
CPack¶
CPack RPM 產生器
學習了設定每個組件的描述和摘要的選項。請參閱CPACK_RPM_<component>_PACKAGE_DESCRIPTION
和CPACK_RPM_<component>_PACKAGE_SUMMARY
變數。CPack RPM 產生器
學習了指定安裝前和安裝後腳本需求的選項。請參閱CPACK_RPM_PACKAGE_REQUIRES_PRE
和CPACK_RPM_PACKAGE_REQUIRES_POST
變數。CPack RPM 產生器
學習了指定解除安裝前和解除安裝後腳本需求的選項。請參閱CPACK_RPM_PACKAGE_REQUIRES_PREUN
和CPACK_RPM_PACKAGE_REQUIRES_POSTUN
變數。CPack RPM 產生器
學習了一個新的CPACK_RPM_<COMPONENT>_PACKAGE_PREFIX
變數,用於指定組件特定的值,以取代CPACK_PACKAGING_INSTALL_PREFIX
。CPack RPM 產生器
學習了一個新的CPACK_RPM_RELOCATION_PATHS
變數,用於為單個 rpm 套件指定多個重新定位前綴。
其他¶
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
工具的輸入檔案已變更,則該工具會自動重新執行。
新的診斷訊息¶
已棄用和移除的功能¶
以
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 發行版支援使用STLPort4
或libstdc++
的編譯器選項。現在,當使用 SolarisStudio 編譯器建置 CMake 時,會自動新增適當的選項來選擇標準函式庫。