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>_FLAGSCMAKE_<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()