CMP0069¶
在版本 3.9 中新增。
INTERPROCEDURAL_OPTIMIZATION
在啟用時強制執行。
CMake 3.9 及更新版本傾向於在啟用 INTERPROCEDURAL_OPTIMIZATION
目標屬性時添加 IPO 旗標,並且如果 CMake 不知道目前編譯器的旗標,則會產生錯誤。由於給定的編譯器可能在其使用的所有環境中都不支援 IPO 旗標,因此現在專案有責任在使用 CheckIPOSupported
模組檢查支援後,再啟用 INTERPROCEDURAL_OPTIMIZATION
目標屬性。這種方法允許專案在支援時有條件地啟用 IPO。它還允許最終使用者在已知支援 IPO 的環境中設定 CMAKE_INTERPROCEDURAL_OPTIMIZATION
變數,即使專案未啟用該屬性。
由於 CMake 3.8 及更低版本僅針對 Linux 上的 Intel 編譯器支援 INTERPROCEDURAL_OPTIMIZATION
,因此某些專案可能會無條件啟用目標屬性。政策 CMP0069
提供了與此類專案的相容性。
此政策在啟用 IPO 屬性時生效。此政策的 OLD
行為是僅針對 Linux 上的 Intel 編譯器添加 IPO 旗標。此政策的 NEW
行為是為目前編譯器添加 IPO 旗標,或者如果 CMake 不知道這些旗標,則產生錯誤。
此政策在 CMake 3.9 版本中引入。它可以透過 cmake_policy()
或 cmake_minimum_required()
進行設定。如果未設定,CMake 會發出警告,並使用 OLD
行為。
注意
政策的 OLD
行為依照定義 已棄用
,並可能在未來版本的 CMake 中移除。
範例¶
行為類似 CMake 3.8,並且除了 Linux 上的 Intel 編譯器外,不套用任何 IPO 旗標
cmake_minimum_required(VERSION 3.8)
project(foo)
# ...
set_property(TARGET ... PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
使用 CheckIPOSupported
模組來偵測目前編譯器、環境和 CMake 版本是否支援 IPO。如果支援不可用,則產生嚴重錯誤
cmake_minimum_required(VERSION 3.9) # CMP0069 NEW
project(foo)
include(CheckIPOSupported)
check_ipo_supported()
# ...
set_property(TARGET ... PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
僅在編譯器支援時套用 IPO 旗標
cmake_minimum_required(VERSION 3.9) # CMP0069 NEW
project(foo)
include(CheckIPOSupported)
# ...
check_ipo_supported(RESULT result)
if(result)
set_property(TARGET ... PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
endif()
不經任何檢查套用 IPO 旗標。如果目前環境中的編譯器不支援 IPO,這可能會導致建置錯誤。如果 CMake 不知道目前編譯器的 IPO 旗標,則產生錯誤
cmake_minimum_required(VERSION 3.9) # CMP0069 NEW
project(foo)
# ...
set_property(TARGET ... PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)