CheckIPOSupported¶
新增於版本 3.9。
檢查編譯器是否支援程序間最佳化 (IPO/LTO)。在啟用 INTERPROCEDURAL_OPTIMIZATION
目標屬性之前使用此命令。
- check_ipo_supported¶
check_ipo_supported([RESULT <result>] [OUTPUT <output>] [LANGUAGES <lang>...])
選項為
RESULT <result>
如果編譯器支援 IPO,則將
<result>
變數設定為YES
,否則設定為NO
。如果未提供此選項,則在不支援 IPO 的情況下,命令將發出嚴重錯誤。OUTPUT <output>
設定
<output>
變數,其中包含任何錯誤的詳細資訊。LANGUAGES <lang>...
指定要檢查其編譯器的語言。
支援以下語言
C
CXX
CUDA
新增於版本 3.25。
Fortran
如果未提供此選項,則預設語言會從目前的
ENABLED_LANGUAGES
全域屬性中選取。
注意
若要使用 check_ipo_supported()
,policy CMP0069
必須設定為 NEW
;否則將發生嚴重錯誤。
新增於版本 3.13:支援 Visual Studio 產生器。
新增於版本 3.24:此檢查使用呼叫端的 CMAKE_<LANG>_FLAGS
和 CMAKE_<LANG>_FLAGS_
值。請參閱 policy CMP0138
。
範例¶
check_ipo_supported() # fatal error if IPO is not supported
set_property(TARGET foo PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
# Optional IPO. Do not use IPO if it's not supported by compiler.
check_ipo_supported(RESULT result OUTPUT output)
if(result)
set_property(TARGET foo PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE)
else()
message(WARNING "IPO is not supported: ${output}")
endif()