Spec-Zone.ru › CMake 3.29

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.29/policy/CMP0114.html

Spec-Zone.ru

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