CMP0113
Новое в версии 3.19.
Генераторы Makefile не повторяют пользовательские команды из зависимостей целевых объектов.
Рассмотрим цепочку пользовательских команд, разделенных между двумя зависимыми целевыми объектами:
add_custom_command(OUTPUT output-not-created
COMMAND ... DEPENDS ...)
set_property(SOURCE output-not-created PROPERTY SYMBOLIC 1)
add_custom_command(OUTPUT output-created
COMMAND ... DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/output-not-created)
add_custom_target(first DEPENDS output-not-created)
add_custom_target(second DEPENDS output-created)
add_dependencies(second first)
В CMake 3.18 и ниже генераторы Makefile помещают копию обеих пользовательских команд в Makefile для целевого объекта second, даже если его зависимость от целевого объекта first гарантирует, что первая пользовательская команда выполняется до второй. Выполнение make second приведет к тому, что первая пользовательская команда выполнится один раз в целевом объекте first и ещё раз в целевом объекте second.
CMake 3.19 и выше предпочитает не дублировать пользовательские команды в целевом объекте, если они уже сгенерированы в других целевых объектах, от которых данный целевой объект зависит (прямо или косвенно). Эта политика обеспечивает совместимость для проектов, которые не были обновлены, чтобы ожидать нового поведения. В частности, могут быть затронуты проекты, которые полагались на дублирующее выполнение или которые неправильно установили свойство файла исходного кода SYMBOLIC.
Поведение OLD для этой политики заключается в дублировании пользовательских команд в зависимых целевых объектах. Поведение NEW этой политики заключается в том, чтобы не дублировать пользовательские команды в зависимых целевых объектах.
Эта политика была введена в CMake версии 3.19. В отличие от многих политик, CMake версии 3.21.0-rc3 не предупреждает, когда эта политика не установлена, и просто использует поведение OLD.
Примечание
Поведение OLD политики является deprecated by definition и может быть удалено в будущих версиях CMake.
© 2000–2021 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.21/policy/CMP0113.html