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
。
變數¶
引入了
CMAKE_MATCH_COUNT
變數,以記錄在if()
指令或string()
指令中,上次正規表示式比對中比對到的次數。
屬性¶
引入了
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
模組,用於尋找 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 Generator
學會了設定每個元件描述和摘要的選項。請參閱CPACK_RPM_<component>_PACKAGE_DESCRIPTION
和CPACK_RPM_<component>_PACKAGE_SUMMARY
變數。CPack RPM Generator
學會了指定安裝前和安裝後指令碼的需求的選項。請參閱CPACK_RPM_PACKAGE_REQUIRES_PRE
和CPACK_RPM_PACKAGE_REQUIRES_POST
變數。CPack RPM Generator
學會了指定解除安裝前和解除安裝後指令碼的需求的選項。請參閱CPACK_RPM_PACKAGE_REQUIRES_PREUN
和CPACK_RPM_PACKAGE_REQUIRES_POSTUN
變數。CPack RPM Generator
學會了一個新的CPACK_RPM_<COMPONENT>_PACKAGE_PREFIX
變數,用於指定一個元件特定值來代替CPACK_PACKAGING_INSTALL_PREFIX
。CPack RPM Generator
學會了一個新的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 上適用於 4.4 到 5.0 版本的 GNU 編譯器 (
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 仍然能夠為那些舊編譯器的使用者產生 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 發行版支援使用STLPort4
或libstdc++
的編譯器選項。現在,當使用 SolarisStudio 編譯器建置 CMake 時,會自動新增一個適當的選項來選擇標準函式庫。