CMP0116ΒΆ
New 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 of
add_custom_command()
were passed directly to Ninja's depfile
variable without any path resolution. This meant that if
add_custom_command()
was called from a subdirectory (created by
add_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 the
DEPFILE
had the same restrictions.
Starting with CMake 3.20, the DEPFILE
argument is relative to
CMAKE_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 DEPFILE
after 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 the
CMAKE_POLICY_WARNING_CMP0116
variable to control the warning.
Note
The OLD
behavior of a policy is
deprecated by definition
and may be removed in a future version of CMake.