CMake 3.6 發行說明¶
自 CMake 3.5 以來所做的變更包括以下內容。
新功能¶
產生器¶
Ninja
產生器學會產生sub/dir/all
形式的虛擬目標,以驅動子目錄的建置。這相當於使用 Makefile 產生器 執行cd sub/dir; make all
。Ninja
產生器現在將系統標頭檔包含在建置依賴項中,以確保在系統套件更新時正確地重新建置。Visual Studio 14 2015
產生器學會支援 Clang/C2 工具集,例如使用-T v140_clang_3_7
選項。此功能為實驗性功能。
命令¶
add_custom_command()
和add_custom_target()
命令學會如何使用CROSSCOMPILING_EMULATOR
可執行目標屬性。install()
命令學到一個新的EXCLUDE_FROM_ALL
選項,可將安裝規則排除在預設安裝之外。list()
命令新增了一個FILTER
子命令,可依據正規表示式篩選列表元素。string(TIMESTAMP)
和file(TIMESTAMP)
命令新增了對%s
佔位符號的支援。這是自 UNIX Epoch 以來的秒數。
變數¶
引入了
CMAKE_DEPENDS_IN_PROJECT_ONLY
變數,以告知 Makefile 產生器 將依賴項掃描限制為僅限專案來源和建置樹狀結構中的檔案。引入了一個新的
CMAKE_HOST_SOLARIS
變數,用於指示 CMake 何時在 Oracle Solaris 主機上執行。新增了
CMAKE_<LANG>_STANDARD_INCLUDE_DIRECTORIES
變數,供工具鏈檔案使用,以指定要附加到所有編譯器命令列的系統包含目錄。CMAKE_<LANG>_STANDARD_LIBRARIES
變數現在已記錄在文件中。它旨在供工具鏈檔案使用,以指定要新增到所有連結器命令列的系統程式庫。引入了
CMAKE_NINJA_OUTPUT_PATH_PREFIX
變數,以告知Ninja
產生器配置產生的build.ninja
檔案以用作subninja
。新增了
CMAKE_TRY_COMPILE_PLATFORM_VARIABLES
變數,供工具鏈檔案使用,以指定必須由try_compile()
命令傳播到測試專案中的平台特定變數。新增了
CMAKE_TRY_COMPILE_TARGET_TYPE
變數,以選擇性地告知try_compile()
命令建置靜態程式庫而不是可執行檔。這對於無法在沒有自訂標誌或腳本的情況下連結二進位檔的交叉編譯工具鏈非常有用。
屬性¶
引入了
DEPLOYMENT_REMOTE_DIRECTORY
目標屬性,以告知Visual Studio 9 2008
和Visual Studio 8 2005
產生器產生 WinCE 專案部署和偵錯器設定的「遠端目錄」。引入了
<LANG>_CLANG_TIDY
目標屬性和支援的CMAKE_<LANG>_CLANG_TIDY
變數,以告知 Makefile 產生器 和Ninja
產生器在C
和CXX
語言的編譯器旁邊執行clang-tidy
。引入了
TIMEOUT_AFTER_MATCH
測試屬性,以選擇性地告知 CTest 在比對測試中的特定輸出後強制執行次要逾時。引入了
VS_CONFIGURATION_TYPE
目標屬性,以指定支援 VS 2010 及更高版本的 Visual Studio 產生器 的自訂專案檔案類型。引入了
VS_STARTUP_PROJECT
目錄屬性,以針對 Visual Studio 產生器 指定產生方案 (.sln
檔案) 的預設啟動專案。
模組¶
CMakePushCheckState
模組現在會推送/彈出/重設CheckTypeSize
中使用的變數CMAKE_EXTRA_INCLUDE_FILES
。ExternalProject
模組學會了GIT_SHALLOW 1
選項,以執行 Git 儲存庫的淺層複製。ExternalProject
模組學會以遞迴方式初始化 Git 子模組,以及在更新時初始化新的子模組。使用GIT_SUBMODULES
選項來限制初始化和更新哪些子模組。ExternalProject
模組學會了DOWNLOAD_NO_EXTRACT 1
引數,以跳過解壓縮下載的檔案 (例如,用於自解壓縮 shell 安裝程式或.msi
檔案)。ExternalProject
模組現在在從 git 儲存庫擷取時使用TLS_VERIFY
。FindBLAS
和FindLAPACK
模組學會支援 OpenBLAS。FindCUDA
模組學會尋找cublas_device
程式庫。FindGTest
模組gtest_add_tests
函數現在會導致 CMake 在測試來源變更時自動重新執行,以便可以重新掃描它們。FindLTTngUST
模組已引入,以尋找 LTTng-UST 程式庫。FindPkgConfig
模組學會選擇性地為其找到的程式庫建立匯入的目標。FindProtobuf
模組學會提供Protobuf_VERSION
變數,並檢查find_package()
呼叫中要求的版本號碼。InstallRequiredSystemLibraries
模組學會了一個新的CMAKE_INSTALL_UCRT_LIBRARIES
選項,以啟用使用 Visual Studio 2015 應用程式本機部署 Windows Universal CRT 程式庫。
平台¶
CYGWIN 現在支援 Clang 編譯器。
新增了對 Bruce C 編譯器的支援,編譯器 ID 為
Bruce
。
CTest¶
ctest_update()
命令現在會查看CTEST_GIT_INIT_SUBMODULES
變數,以判斷是否應在更新之前更新子模組。ctest_update()
命令現在將在更新時同步子模組。新增子模組或變更子模組 URL 的更新現在將正確提取。
CPack¶
CPack DEB 產生器
學會如何在CPACK_DEBIAN_PACKAGE_SHLIBDEPS
用於依賴項自動偵測時,處理CMAKE_INSTALL_RPATH
中的$ORIGIN
。CPack DEB 產生器
學會如何在套件包含共享程式庫時產生DEBIAN/shlibs
控制檔。CPack DEB 產生器
學會如何在套件將程式庫安裝在 ldconfig 控制的位置 (例如/lib/
、/usr/lib/
) 時產生DEBIAN/postinst
和DEBIAN/postrm
檔案。CPack DEB 產生器
學會如何在多組件設定中使用並設定CPACK_COMPONENT_<compName>_DEPENDS
變數時,產生 Debian 套件之間的依賴關係。為了向後相容,此功能預設為停用。請參閱CPACK_DEBIAN_ENABLE_COMPONENT_DEPENDS
。CPack DEB 產生器
學會如何設定自訂套件檔案名稱,包括如何產生正確命名的 Debian 套件<PackageName>_<VersionNumber>-<DebianRevisionNumber>_<DebianArchitecture>.deb
為了向後相容,此功能預設為停用。請參閱
CPACK_DEBIAN_FILE_NAME
和CPACK_DEBIAN_<COMPONENT>_FILE_NAME
。CPack DEB 產生器
學會如何設定套件發行編號 (與CPACK_DEBIAN_FILE_NAME
設定的DEB-DEFAULT
值組合使用時,套件檔案名稱中的DebianRevisionNumber
)。請參閱CPACK_DEBIAN_PACKAGE_RELEASE
。CPack DEB 產生器
學會如何設定每個組件的套件架構。請參閱CPACK_DEBIAN_<COMPONENT>_PACKAGE_ARCHITECTURE
。CPack DragNDrop 產生器
學到一個新選項,可以跳過/Applications
符號連結。請參閱CPACK_DMG_DISABLE_APPLICATIONS_SYMLINK
變數。CPackIFW
模組新增了一個新的cpack_ifw_update_repository()
命令,以從遠端儲存庫更新特定於 QtIFW 的儲存庫。CPack RPM 產生器
學會如何在啟用時設定 RPMdist
標籤作為 RPMRelease:
標籤的一部分 (在某些 Linux 發行版上是強制性的,例如在 Fedora 上)。請參閱CPACK_RPM_PACKAGE_RELEASE_DIST
。CPack RPM 產生器
學會如何設定套件內容的擁有使用者/群組以及檔案/目錄權限的預設值。請參閱CPACK_RPM_DEFAULT_USER
、CPACK_RPM_DEFAULT_GROUP
、CPACK_RPM_DEFAULT_FILE_PERMISSIONS
、CPACK_RPM_DEFAULT_DIR_PERMISSIONS
及其每個組件的對應項。CPack RPM 產生器
學會如何設定使用者定義的套件檔案名稱、如何指定 rpmbuild 應決定檔案名稱格式,以及如何處理由單個使用者定義的 spec 檔案產生的多個 rpm 套件。請參閱CPACK_RPM_FILE_NAME
和CPACK_RPM_<component>_FILE_NAME
。CPack RPM 產生器
學會如何正確處理指向產生套件外部的符號連結。
其他¶
編譯功能
功能現在知道 UNIX 平台上 Intel C++ 編譯器版本 12.1 到 16.0 支援的功能。
已棄用和移除的功能¶
CMakeForceCompiler
模組及其巨集現在已棄用。請參閱模組文件以取得說明。find_library()
、find_path()
和find_file()
命令不再在非 Windows 平台上從PATH
環境變數衍生的安裝前綴中搜尋。此行為在 CMake 3.3 中新增以支援 Windows 主機,但已證明在 UNIX 主機上存在問題。將一些<prefix>/bin
目錄保留在PATH
中僅用於其工具的使用者不一定希望搜尋任何支援的<prefix>/lib
目錄。可以將CMAKE_PREFIX_PATH
環境變數設定為要搜尋的前綴的 分號分隔列表。Visual Studio 7 .NET 2003
產生器現在已棄用,將在 CMake 的未來版本中移除。Visual Studio 7
產生器 (適用於 VS .NET 2002) 已移除。自 CMake 3.3 以來,它已被棄用。Visual Studio 6
產生器已移除。自 CMake 3.3 以來,它已被棄用。
其他變更¶
在
cmake.org
上提供的預編譯 OS X 二進位檔現在需要 OS X 10.7 或更新版本。在 Linux 和 FreeBSD 平台上,從原始碼建置 CMake 本身且不使用系統提供的 libcurl 時,如果系統上找到 OpenSSL,現在預設使用 OpenSSL。這為透過
https
支援網路通訊的命令啟用 SSL/TLS 支援,例如file(DOWNLOAD)
、file(UPLOAD)
和ctest_submit()
。cmake(1)
--build
命令列工具現在會拒絕具有錯誤的多個--target
選項,而不是靜默忽略除最後一個選項之外的所有選項。AUTOMOC
現在會在不同目錄中的多個原始檔使用相同名稱的#include <moc_foo.cpp>
時診斷名稱衝突 (因為產生的moc_foo.cpp
檔案會衝突)。FindBISON
模組BISON_TARGET
巨集現在透過將VERBATIM
選項傳遞給內部add_custom_command()
呼叫來支援特殊字元。這可能會破壞手動新增逸出來解決錯誤的用戶端。FindFLEX
模組FLEX_TARGET
巨集現在透過將VERBATIM
選項傳遞給內部add_custom_command()
呼叫來支援特殊字元。這可能會破壞手動新增逸出來解決錯誤的用戶端。為求與其他 find 模組一致,
FindProtobuf
模組的輸入和輸出變數已全部從PROTOBUF_
重新命名為Protobuf_
。如果提供了舊格式的輸入變數,仍將會採用,而舊格式的輸出變數則始終會提供。CPack RPM Generator
現在支援每個組件 CPackRPM 特定變數中使用大寫組件名稱。例如,名為foo
的組件現在預期組件特定變數為CPACK_RPM_FOO_PACKAGE_NAME
,而之前則預期為CPACK_RPM_foo_PACKAGE_NAME
。變數中大寫的組件名稱部分與其他 CPack 變數所使用的慣例相容。為了向後相容,舊格式的變數仍然有效,如果同時設定了兩個版本的變數,則優先使用舊格式,但未來建議使用的格式是在變數中使用大寫組件名稱。稍後版本中將新增至 CPackRPM 的新變數將僅支援大寫組件變數格式。CPack NSIS 產生器的組態檔範本已修正,會為
CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL
選項所使用的解除安裝工具路徑加上引號。這樣可以避免依賴不安全的 Windows 功能來執行路徑中包含空格的解除安裝工具。