Spec-Zone.ru › CMake

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 политики по определению считается устаревшим и может быть удалено в будущей версии CMake.

© 2000–2026 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/latest/policy/CMP0116.html

Spec-Zone.ru

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