Spec-Zone.ru › CMake 3.29

CMP0116

Новое в версии 3.20.

Генераторы Ninja преобразуют DEPFILE из add_custom_command().

В CMake 3.19 и ниже файлы, заданные аргументом DEPFILE команды add_custom_command(), передавались непосредственно в переменную Ninja depfile без разрешения путей. Это означало, что если команда add_custom_command() вызывалась из подкаталога (созданного с помощью add_subdirectory()), то аргумент DEPFILE должен был быть либо абсолютным путем, либо путем, относительным к CMAKE_BINARY_DIR, а не к CMAKE_CURRENT_BINARY_DIR. Кроме того, никакой трансформации не производилось над файлами, перечисленными в DEPFILE, что означало, что пути внутри DEPFILE имели те же ограничения.

Начиная с CMake 3.20, аргумент DEPFILE является относительным к CMAKE_CURRENT_BINARY_DIR (если он не абсолютный), а пути в DEPFILE также относительны к CMAKE_CURRENT_BINARY_DIR. CMake автоматически преобразует пути в DEPFILE (если они не абсолютные) после выполнения пользовательской команды. Файлы, указанные в DEPFILE, не изменяются никоим образом. Вместо этого CMake записывает преобразование в свой собственный внутренний файл и передает этот внутренний файл в переменную Ninja depfile. Это преобразование происходит независимо от того, является ли DEPFILE относительным, и независимо от того, вызывается ли add_custom_command() из подкаталога.

Поведение OLD для данной политики заключается в передаче DEPFILE в Ninja без изменений. Поведение NEW для данной политики заключается в преобразовании DEPFILE после выполнения пользовательской команды. Статус CMP0116 фиксируется в момент создания пользовательской команды, и вы можете иметь пользовательские команды в одном каталоге с разными значениями для CMP0116 путем установки политики перед каждой пользовательской командой.

Эта политика была введена в версии CMake 3.20. Она может быть установлена с помощью cmake_policy() или cmake_minimum_required(). Если она не установлена, CMake по умолчанию не выдает предупреждения (если DEPFILE используется в подкаталоге) и использует поведение OLD.

См. документацию переменной CMAKE_POLICY_WARNING_CMP0116 для управления предупреждением.

Примечание

Поведение 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/CMP0116.html

Spec-Zone.ru

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