Spec-Zone.ru › CMake 3.28

CMP0114

Новое в версии 3.19.

ExternalProject шаги полностью принимают свои шаги.

Команда ExternalProject_Add() параметр STEP_TARGETS, и функция ExternalProject_Add_StepTargets(), могут быть использованы для создания целей сборки для отдельных шагов внешнего проекта.

В CMake 3.18 и ниже, целевые шаги имеют некоторые ограничения:

  • Целевые шаги всегда зависят от целей, именованных параметром ExternalProject_Add() DEPENDS, даже если не все шаги их нуждаются. Для того, чтобы разрешить создание целевых шагов без этих зависимостей, может быть использован параметр ExternalProject_Add() INDEPENDENT_STEP_TARGETS, или параметр ExternalProject_Add_StepTargets() NO_DEPENDS. Однако добавление таких "независимых" целевых шагов имеет смысл только для определенных шагов, таких как download, update, и patch, поскольку они не нуждаются ни в каких зависимостях сборки внешнего проекта. Кроме того, не имеет смысла создавать независимые целевые шаги для шагов, которые зависят от зависимых шагов. Такие правила не применяются, и проекты, которые не следуют им, могут генерировать системы сборки с запутанным и генератор-специфичным поведением.
  • Целевые шаги содержат копии пользовательских команд, реализующих их шаги, которые отделены от копий в основной цели, созданной командой ExternalProject_Add(), и основная цель не зависит от целевых шагов. При параллельной сборке, которая одновременно запускает основную цель и целевые шаги, могут одновременно выполняться несколько копий команд шагов и конкурировать друг с другом.

    Кроме того, до политики CMP0113, целевые шаги, сгенерированные генераторами Makefile Generators, также содержат все пользовательские команды, от которых зависит их шаг. Это может привести к повторному выполнению этих шагов даже в последовательных сборках.

В CMake 3.19 и выше, модуль ExternalProject предпочитает переработанный дизайн для решения этих проблем:

  • Каждый шаг классифицируется как "независимый", если он не зависит от других целей, именованных параметром ExternalProject_Add() DEPENDS. Предварительно определенные шаги автоматически классифицируются по умолчанию:

    • Шаги download, update, и patch являются независимыми.
    • Шаги configure, build, test, и install — нет.

    Для пользовательских шагов команда ExternalProject_Add_Step() предоставляет параметр INDEPENDENT для их маркировки как независимых. Ошибка происходит, если шаг помечается как независимый, если он зависит от других шагов, которые не являются таковыми. Обратите внимание, что это использование термина "независимый" относится только к независимости от внешних целей и ортогонально зависимостям шага от других шагов.

  • Целевые шаги, созданные параметром ExternalProject_Add() STEP_TARGETS или функцией ExternalProject_Add_Step() теперь являются независимыми тогда и только тогда, когда их шаги помечены как независимые. Параметр ExternalProject_Add() INDEPENDENT_STEP_TARGETS и параметр ExternalProject_Add_StepTargets() NO_DEPENDS больше не разрешены.
  • Целевые шаги, при создании, полностью отвечают за хранение пользовательских команд, реализующих их шаги. Основная цель, созданная командой ExternalProject_Add(), зависит от целевых шагов, а целевые шаги зависят друг от друга. Зависимости на уровне целей соответствуют зависимостям на уровне файлов, используемым пользовательскими командами для каждого шага.

    Когда используется параметр ExternalProject_Add() UPDATE_DISCONNECTED или TEST_EXCLUDE_FROM_MAIN, или параметр ExternalProject_Add_Step() EXCLUDE_FROM_MAIN используется для пользовательского шага, некоторые целевые шаги могут быть созданы автоматически. Они необходимы для хранения шагов, которые обычно зависят от основной цели и отключенных целевых шагов.

Политика CMP0114 обеспечивает совместимость для проектов, которые не были обновлены для ожидания нового поведения. Поведение OLD для этой политики — использовать описанное выше поведение с 3.18 и ниже. Поведение NEW для этой политики — использовать описанное выше поведение, предпочтительное для 3.19 и выше.

Эта политика была введена в версии CMake 3.19. Версия CMake 3.28.6 предупреждает, когда политика не установлена, и использует поведение OLD. Используйте команду cmake_policy(), чтобы установить ее явно на OLD или NEW.

© 2000–2024 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.28/policy/CMP0114.html

Spec-Zone.ru

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