OPTIMIZE_DEPENDENCIES¶
在版本 3.19 中新增。
啟用靜態和物件程式庫的依賴性最佳化。
當此屬性設定為 true 時,如果靜態或物件程式庫的某些依賴性對於建置程式庫並非必要,則在產生時可能會移除它們,因為靜態和物件程式庫實際上不會與任何東西連結。
如果靜態或物件程式庫啟用了依賴性最佳化,它會先捨棄所有依賴性。然後,它會檢查它最初擁有的所有直接和間接依賴性,如果它們符合以下任何條件,則將它們加回:
依賴性是透過
add_dependencies()
加入到程式庫的。依賴性是透過程式庫中由使用該依賴性的自訂命令產生的原始檔加入到程式庫的。
依賴性具有與其關聯的任何
PRE_BUILD
、PRE_LINK
或POST_BUILD
自訂命令。依賴性包含任何由自訂命令產生的原始檔。
依賴性包含任何會產生與程式庫相關的副作用的語言。目前,除了 C、C++、Objective-C、Objective-C++、組語和 CUDA 之外的所有語言都被假定會產生副作用。但是,假設一種語言的副作用與另一種語言無關(例如,假設 Fortran 程式庫沒有任何與 Swift 程式庫相關的副作用)。
舉例來說,假設您有一個靜態 Fortran 程式庫,它依賴於一個靜態 C 程式庫,而該程式庫又依賴於一個靜態 Fortran 程式庫。頂層 Fortran 程式庫啟用了最佳化,但中間的 C 程式庫沒有。如果您建置頂層 Fortran 程式庫,則底層的 Fortran 程式庫也會建置,但不會建置中間的 C 程式庫,因為 C 程式庫沒有任何與 Fortran 程式庫相關的副作用。但是,如果您建置中間的 C 程式庫,即使它沒有任何與 C 程式庫相關的副作用,底層的 Fortran 程式庫也會建置,因為 C 程式庫沒有啟用最佳化。
此屬性會由建立目標時的 CMAKE_OPTIMIZE_DEPENDENCIES
變數的值初始化。