Spec-Zone.ru › CMake

CMP0069

Добавлен в версии 3.9.

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_policy() или cmake_minimum_required(). Если она не установлена, CMake выводит предупреждение и использует поведение OLD.

Примечание

Поведение 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. Выдавайте ошибку fatal, если поддержка отсутствует:

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–2024 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/latest/policy/CMP0069.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API