Spec-Zone.ru › CMake 3.31

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

Примечание

Поведение OLD политики — deprecated by definition и может быть удалено в будущей версии CMake.

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

Spec-Zone.ru

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