CMake 3.13 發行說明¶
自 CMake 3.12 以來所做的變更包括以下。
新功能¶
產生器 (Generators)¶
適用於 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
目標屬性,用於使用 Visual Studio 產生器 為 VS 2010 及以上版本設定偵錯命令列引數。已建立
VS_DEBUGGER_ENVIRONMENT
目標屬性,用於使用 Visual Studio 產生器 為 VS 2010 及以上版本設定偵錯環境。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 產生器
學會在設定CPACK_DEBIAN_DEBUGINFO_PACKAGE
時將偵錯符號分割到對應的 .ddeb 封裝中。CPack DEB 產生器
學會在封裝檔案時遵循SOURCE_DATE_EPOCH
環境變數。這對於產生可重製的封裝很有用。CPack 新增了
CPack 外部 產生器
,用於以其他軟體可以理解的格式匯出 CPack 中繼資料。此產生器的目的是允許外部封裝軟體在不可能將 CPack 用於整個封裝過程時利用 CPack 的功能。
已棄用和移除的功能¶
為策略
CMP0055
到CMP0063
新增了明確的棄用診斷(CMP0054
及以下版本已棄用)。cmake-policies(7)
手冊說明,所有策略的舊行為都已棄用,專案應移植到新行為。
其他變更¶
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
行為下),會不正確地將這些依賴項的使用要求傳播到連結靜態程式庫的相依項。此問題已修正。