Spec-Zone.ru › CMake 3.19

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

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

Spec-Zone.ru

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