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.17.5 выводит предупреждение, если политика не установлена, и использует 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–2020 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.17/policy/CMP0069.html