| CMP0113 |
| ------- |
| |
| .. versionadded:: 3.19 |
| |
| :ref:`Makefile Generators` do not repeat custom commands from target |
| dependencies. |
| |
| Consider a chain of custom commands split across two dependent targets: |
| |
| .. code-block:: cmake |
| |
| add_custom_command(OUTPUT output-not-created |
| COMMAND ... DEPENDS ...) |
| set_property(SOURCE output-not-created PROPERTY SYMBOLIC 1) |
| add_custom_command(OUTPUT output-created |
| COMMAND ... DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/output-not-created) |
| add_custom_target(first DEPENDS output-not-created) |
| add_custom_target(second DEPENDS output-created) |
| add_dependencies(second first) |
| |
| In CMake 3.18 and lower, the Makefile generators put a copy of both custom |
| commands in the Makefile for target ``second`` even though its dependency on |
| target ``first`` ensures that the first custom command runs before the second. |
| Running ``make second`` would cause the first custom command to run once in |
| the ``first`` target and then again in the ``second`` target. |
| |
| CMake 3.19 and above prefer to not duplicate custom commands in a target that |
| are already generated in other targets on which the target depends (directly or |
| indirectly). This policy provides compatibility for projects that have not |
| been updated to expect the new behavior. In particular, projects that relied |
| on the duplicate execution or that did not properly set the :prop_sf:`SYMBOLIC` |
| source file property may be affected. |
| |
| The ``OLD`` behavior for this policy is to duplicate custom commands in |
| dependent targets. The ``NEW`` behavior of this policy is to not duplicate |
| custom commands in dependent targets. |
| |
| This policy was introduced in CMake version 3.19. Unlike many policies, |
| CMake version |release| does *not* warn when this policy is not set and |
| simply uses ``OLD`` behavior. |
| |
| .. include:: DEPRECATED.txt |