CMP0212 — CMake 4.4.1 Documentation

# CMP0212

Added in version 4.4.

`add_custom_command()` `DEPENDS` does not strip `.exe` suffixes.

When searching for dependencies specified with the `DEPENDS` option of `add_custom_command()`, CMake 4.3 and below applied a heuristic to remove `.exe` from the end of `DEPENDS` argument values, which created a target-level dependency on an executable with that stripped name if such a target exists. This allowed using the name of the target output file as an alternative spelling when naming dependencies. However, with the emergence of CMake's target model, specifying the output file in this way is no longer needed, and leads to conflicts in creating target- and file-level dependencies when targets exist with the `.exe` suffix in the name itself.

The `OLD` behavior of this policy strips the `.exe` suffix from arguments to `DEPENDS` when searching for target-level dependencies. The `NEW` behavior does not strip the `.exe` suffix in its search. CMake will otherwise proceed normally with the other dependency search heuristics as specified in `add_custom_command()` `DEPENDS`. Users are encouraged to specify the name of the executable target if a target-level dependency is desired, or use the `TARGET_FILE` generator expression if a file-level dependency is desired, rather than implying the target indirectly via its output file name.

This policy was introduced in CMake version 4.4. It may be set by `cmake_policy()` or `cmake_minimum_required()`. If it is not set, CMake does not warn, and uses `OLD` behavior.

Note

The `OLD` behavior of a policy is deprecated by definition and may be removed in a future version of CMake.