OPTIMIZE_DEPENDENCIES

在 3.19 版本加入。

啟動靜態和物件程式庫的依賴性最佳化。

當此屬性設定為 true 時,如果靜態或物件程式庫並非必要來建置程式庫,則在產生時可能會移除某些依賴性,因為靜態和物件程式庫實際上不會連結任何東西。

如果靜態或物件程式庫啟用了依賴性最佳化,它首先會捨棄所有依賴性。然後,它會檢查它最初擁有的所有直接和間接依賴性,並在它們符合以下任何條件時將它們加回

  • 依賴性是透過 add_dependencies() 新增到程式庫的。

  • 依賴性是透過程式庫中由使用依賴性的自訂命令產生的原始檔新增到程式庫的。

  • 依賴性具有與其關聯的任何 PRE_BUILDPRE_LINKPOST_BUILD 自訂命令。

  • 依賴性包含任何由自訂命令產生的原始檔。

  • 依賴性包含任何會產生與程式庫相關的副作用的語言。目前,除了 C、C++、Objective-C、Objective-C++、組譯語言和 CUDA 之外的所有語言都被假設會產生副作用。然而,假設一種語言的副作用與另一種語言無關(例如,假設 Fortran 程式庫沒有任何與 Swift 程式庫相關的副作用)。

舉例來說,假設您有一個靜態 Fortran 程式庫,它依賴於一個靜態 C 程式庫,而後者又依賴於一個靜態 Fortran 程式庫。頂層 Fortran 程式庫啟用了最佳化,但中間 C 程式庫沒有。如果您建置頂層 Fortran 程式庫,底層 Fortran 程式庫也會建置,但中間 C 程式庫則不會,因為 C 程式庫沒有任何與 Fortran 程式庫相關的副作用。然而,如果您建置中間 C 程式庫,即使底層 Fortran 程式庫沒有任何與 C 程式庫相關的副作用,底層 Fortran 程式庫也會建置,因為 C 程式庫未啟用最佳化。

此屬性由建立目標時的 CMAKE_OPTIMIZE_DEPENDENCIES 變數的值初始化。