Spec-Zone.ru › CMake 3.27

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, также содержат все пользовательские команды, от которых зависит их шаг. Это может привести к повторному выполнению этих шагов даже в последовательной сборке.

В 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.27.9 выдает предупреждение, когда политика не установлена, и использует OLD поведение. Используйте команду cmake_policy() для явного её установки в OLD или NEW.

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

Spec-Zone.ru

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