| CMP0116 | |
| ------- | |
| .. versionadded:: 3.20 | |
| Ninja generators transform ``DEPFILE`` s from :command:`add_custom_command`. | |
| In CMake 3.19 and below, files given to the ``DEPFILE`` argument of | |
| :command:`add_custom_command` were passed directly to Ninja's ``depfile`` | |
| variable without any path resolution. This meant that if | |
| :command:`add_custom_command` was called from a subdirectory (created by | |
| :command:`add_subdirectory`), the ``DEPFILE`` argument would have to be either | |
| an absolute path or a path relative to :variable:`CMAKE_BINARY_DIR`, rather | |
| than :variable:`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 | |
| :variable:`CMAKE_CURRENT_BINARY_DIR` (unless it is absolute), and the paths in | |
| the ``DEPFILE`` are also relative to :variable:`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 :command:`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. | |
| .. |INTRODUCED_IN_CMAKE_VERSION| replace:: 3.20 | |
| .. |WARNS_OR_DOES_NOT_WARN| replace:: | |
| does *not* warn by default (unless ``DEPFILE`` is used in a subdirectory) | |
| .. include:: include/STANDARD_ADVICE.rst | |
| See documentation of the | |
| :variable:`CMAKE_POLICY_WARNING_CMP0116 <CMAKE_POLICY_WARNING_CMP<NNNN>>` | |
| variable to control the warning. | |
| .. include:: include/DEPRECATED.rst |