CMP0069
INTERPROCEDURAL_OPTIMIZATION применяется при включении.
CMake 3.9 и более поздние версии предпочитают добавлять флаги IPO всякий раз, когда свойство целевого объекта INTERPROCEDURAL_OPTIMIZATION включено, и выдают ошибку, если флаги неизвестны CMake для текущего компилятора. Поскольку определенный компилятор может не поддерживать флаги IPO во всех средах, в которых он используется, теперь ответственность проекта — использовать модуль CheckIPOSupported для проверки поддержки перед включением свойства целевого объекта INTERPROCEDURAL_OPTIMIZATION. Этот подход позволяет проекту условно активировать IPO, если он поддерживается. Также это позволяет конечному пользователю установить переменную CMAKE_INTERPROCEDURAL_OPTIMIZATION в среде, известной как поддерживающая IPO, даже если проект не включает свойство.
Так как CMake 3.8 и ниже поддерживали INTERPROCEDURAL_OPTIMIZATION только для компилятора Intel в Linux, некоторые проекты могут безусловно включать свойство целевого объекта. Политика CMP0069 обеспечивает совместимость с такими проектами.
Эта политика вступает в силу при включении свойства IPO. OLD поведение для этой политики — добавлять флаги IPO только для компилятора Intel в Linux. NEW поведение для этой политики — добавлять флаги IPO для текущего компилятора или выдавать ошибку, если CMake не знает эти флаги.
Эта политика была введена в CMake версии 3.9. CMake версии 3.12.4 предупреждает, когда политика не установлена и использует OLD поведение. Используйте команду cmake_policy() для явного её установки в OLD или NEW.
Примечание
OLD поведение политики — deprecated by definition и может быть удалено в будущих версиях CMake.
Примеры
Вести себя как CMake 3.8 и не применять никаких флагов IPO, за исключением компилятора Intel в Linux:
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)
© 2000–2019 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.12/policy/CMP0069.html