CMP0116 — CMake 4.0.1 Documentation (original) (raw)

Added in version 3.20.

Ninja generators transform DEPFILE s from add_custom_command().

In CMake 3.19 and below, files given to the DEPFILE argument ofadd_custom_command() were passed directly to Ninja's depfilevariable without any path resolution. This meant that ifadd_custom_command() was called from a subdirectory (created byadd_subdirectory()), the DEPFILE argument would have to be either an absolute path or a path relative to CMAKE_BINARY_DIR, rather than CMAKE_CURRENT_BINARY_DIR. In addition, no transformation was done on the file listed in DEPFILE, which meant that the paths within theDEPFILE had the same restrictions.

Starting with CMake 3.20, the DEPFILE argument is relative toCMAKE_CURRENT_BINARY_DIR (unless it is absolute), and the paths in the DEPFILE are also relative to CMAKE_CURRENT_BINARY_DIR. CMake automatically transforms the paths in the DEPFILE (unless they are absolute) after the custom command is run. The file listed in DEPFILE is not modified in any way. Instead, CMake writes the transformation to its own internal file, and passes this internal file to Ninja's depfile variable. This transformation happens regardless of whether or not DEPFILE is relative, and regardless of whether or not add_custom_command() is called from a subdirectory.

The OLD behavior for this policy is to pass the DEPFILE to Ninja unaltered. The NEW behavior for this policy is to transform the DEPFILEafter running the custom command. The status of CMP0116 is recorded at the time of the custom command's creation, and you can have custom commands in the same directory with different values for CMP0116 by setting the policy before each custom command.

This policy was introduced in CMake version 3.20. It may be set by cmake_policy() or cmake_minimum_required(). If it is not set, CMake does not warn by default (unless DEPFILE is used in a subdirectory), and uses OLD behavior.

See documentation of theCMAKE_POLICY_WARNING_CMP0116variable to control the warning.