CMake 3.13 發行說明¶
自 CMake 3.12 以來所做的變更包括以下內容。
新功能¶
產生器¶
適用於 VS 2010 及更高版本的 Visual Studio 產生器 學會支援
INTERPROCEDURAL_OPTIMIZATION
目標屬性,並支援CheckIPOSupported
模組。Xcode
產生器學會設定更多 Xcode Scheme 欄位。請參閱CMAKE_XCODE_GENERATE_SCHEME
變數。Green Hills MULTI
產生器已更新新增透過
CMAKE_GENERATOR_PLATFORM
選擇架構的支援:例如arm
、ppc
和86
。新增透過
CMAKE_GENERATOR_TOOLSET
選擇工具集的支援,例如comp_201205
、comp_201510
、comp_201722_beta
。新增透過
GHS_TARGET_PLATFORM
選擇平台的支援,例如integrity
、linux
、standalone
等。不再檢查是否已安裝基於
arm
的編譯器,而是確保存在正確的gbuild.exe
。不再硬式編碼 ARM 檔案、BSP、工具集或 OS 位置。
命令列¶
命令¶
add_custom_command()
和add_custom_target()
命令學會支援WORKING_DIRECTORY
選項中的產生器表達式。建立
add_link_options()
命令,以在目前目錄中新增連結選項。install(TARGETS)
命令學會安裝在目前目錄外部建立的目標。link_directories()
命令獲得了控制插入位置的選項。list(SORT)
命令獲得了控制用於排序條目的比較運算的選項。math()
命令獲得了十六進制的選項。建立
target_link_directories()
命令,以指定目標及其相依項的連結目錄。建立
target_link_options()
命令,以指定目標及其相依項的連結選項。現在可以呼叫
target_link_libraries()
命令來修改在目前目錄外部建立的目標。請參閱政策CMP0079
。
變數¶
新增了
CMAKE_AUTOGEN_VERBOSE
變數,以選擇性地增加來自 CMake 專案程式碼內的AUTOMOC
、AUTOUIC
和AUTORCC
的詳細程度。新增了
CMAKE_VS_GLOBALS
變數,以在建立目標時初始化目標上的VS_GLOBAL_<variable>
目標屬性。
屬性¶
新增了
DEPLOYMENT_ADDITIONAL_FILES
目標屬性,以告知Visual Studio 9 2008
產生器指定額外檔案,以便部署到 WinCE 裝置進行遠端偵錯。建立
INTERFACE_LINK_DEPENDS
目標屬性,以指定檔案的過渡性連結相依性。LINK_DEPENDS
目標屬性學會支援產生器表達式
。新增了
LINK_DIRECTORIES
和INTERFACE_LINK_DIRECTORIES
目標屬性,以收集目標及其相依項的連結目錄。使用target_link_directories()
命令來設定它們。新增了
LINK_OPTIONS
和INTERFACE_LINK_OPTIONS
目標屬性,以收集目標及其相依項的連結選項。使用target_link_options()
命令來設定它們。新增了
LINK_OPTIONS
目錄屬性,以收集在目前目錄下建立的目標的連結選項。使用add_link_options()
命令來設定它。建立
STATIC_LIBRARY_OPTIONS
目標屬性,以指定在建立靜態程式庫時要使用的封存器選項。建立
VS_DEBUGGER_COMMAND_ARGUMENTS
目標屬性,以使用適用於 VS 2010 及更高版本的 Visual Studio 產生器 設定偵錯命令列引數。建立
VS_DEBUGGER_ENVIRONMENT
目標屬性,以使用適用於 VS 2010 及更高版本的 Visual Studio 產生器 設定偵錯環境。VS_DEBUGGER_COMMAND
和VS_DEBUGGER_WORKING_DIRECTORY
目標屬性現在支援產生器表達式。
模組¶
FindBoost
模組獲得了Boost_ARCHITECTURE
選項,以指定 Boost 特定架構的程式庫檔案名稱片段。FindCURL
模組學會分別尋找偵錯和發行變體。FindMatlab
模組獲得了新的組件ENGINE_LIBRARY
和DATAARRAY_LIBRARY
,以請求分別尋找 Matlab C++ Engine 和 DataArray 程式庫。FindMatlab
模組現在在 Visual Studio 中明確匯出 mexFunction。FindMatlab
模組獲得了新的MCC_COMPILER
組件,以請求尋找 Matlab Compiler 外掛程式。FindPkgConfig
模組獲得了一個選項,以在全域範圍內建立匯入的目標。FindPkgConfig
模組獲得了對<
和>
運算符號的支援,用於版本檢查,除了已支援的運算符號>=
、<=
和=
之外。模組
FindPython3
、FindPython2
和FindPython
獲得了控制 macOS (Framework) 和 Windows (Registry) 上資源查找順序的功能。FindSubversion
模組Subversion_WC_INFO
命令獲得了IGNORE_SVN_FAILURE
選項,以抑制失敗,例如當原始碼樹不在 Subversion 控制下時。UseSWIG
模組學會管理SWIG
編譯的目標屬性INCLUDE_DIRECTORIES
。
CTest¶
ctest(1)
獲得了--progress
選項,以在輸出到終端機時啟用即時測試進度摘要。
CPack¶
CPack DEB Generator
學會將偵錯符號分割到對應的 .ddeb 套件中,當設定CPACK_DEBIAN_DEBUGINFO_PACKAGE
時。CPack DEB Generator
學會在使用套件檔案時遵守SOURCE_DATE_EPOCH
環境變數。這對於產生可重現的套件很有用。CPack 獲得了新的
CPack External Generator
,用於匯出其他軟體可以理解的格式的 CPack 元數據。此產生器的目的是允許外部封裝軟體在可能無法使用 CPack 進行整個封裝流程時,利用 CPack 的功能。
已棄用和移除的功能¶
為政策
CMP0055
到CMP0063
新增了明確的棄用診斷 (CMP0054
及更低版本已棄用)。cmake-policies(7)
手冊說明,所有政策的 OLD 行為都已棄用,專案應移植到 NEW 行為。
其他變更¶
在
cmake.org
上提供的預編譯二進位檔案現在包含 qthelp 格式的文件。option()
命令現在會遵守相同名稱的現有正常變數,並且不執行任何操作,而不是可能建立快取條目 (或設定其類型) 並移除正常變數。請參閱政策CMP0077
。Makefile 產生器 學會在
make clean
期間移除自訂命令和自訂目標副產品。target_sources()
命令現在將相對原始碼檔案路徑解譯為相對於目前原始碼目錄。這簡化了從子目錄逐步建立目標的原始碼。新增了CMP0076
政策,以提供與舊行為的向後相容性。BundleUtilities
模組可能不再在配置時間包含。這始終是一個錯誤。請參閱政策CMP0080
。LINK_DIRECTORIES
目標屬性現在預期絕對路徑。請參閱政策CMP0081
。CPack 產生器已移至文件中的獨立章節中,而不是將文件放在其內部實作模組中。這些內部實作模組也不再適用於可能錯誤地包含它們的腳本,因為它們從一開始就不應該可用。
更新¶
自 CMake 3.13.0 以來所做的變更包括以下內容。
3.13.2¶
CMake 3.13.0 包含一項變更,將編譯器隱含包含目錄傳遞給
AUTOMOC
的moc
工具。由於使現有組建回歸,因此已還原此變更,並且在稍後版本中重新引入之前,需要進一步調查。
3.13.3¶
已修復
Visual Studio 15 2017
產生器,以在安裝 VS 2019 時運作。CMake 現在檢查在執行 CMake 時是否至少指定了原始碼或二進位目錄之一,如果兩者都遺失,則會發出錯誤。這一直是記錄在案的要求,但實作先前意外地接受了兩者都未指定的情況,只要給定一些其他引數,並以靜默方式使用目前工作目錄作為原始碼和建置樹。
3.13.4¶
在 3.13.3 版本中,當未指定來源目錄或二進制目錄時所加入的錯誤,已降級為警告。雖然這從來不是預期的、有文件記錄的或支援的行為,但有些專案依賴於此。為了提供過渡期,此錯誤已降級為警告,適用於 3.13.x 發行系列的剩餘版本,但在後續版本中可能會再次成為致命錯誤。依賴舊行為的腳本可以通過顯式指定來源樹的路徑(即使只是
.
`)來輕鬆修復,並繼續與所有 CMake 版本一起工作。
3.13.5¶
在 CMake 3.13.0 到 3.13.4 版本中,呼叫
target_link_libraries()
以將PRIVATE
依賴項新增到另一個目錄中建立的靜態庫(在CMP0079
NEW
行為策略下)會不正確地將這些依賴項的使用需求傳播到連結該靜態庫的相依項。此問題已修正。