Spec-Zone.ru › CMake 3.26

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

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

Spec-Zone.ru

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