# CMP0043

Ignore COMPILE_DEFINITIONS_<Config> properties

CMake 2.8.12 and lower allowed setting the `COMPILE_DEFINITIONS_<CONFIG>` target property and `COMPILE_DEFINITIONS_<CONFIG>` directory property to apply configuration-specific compile definitions.

Since CMake 2.8.10, the `COMPILE_DEFINITIONS` property has supported `generator expressions` for setting configuration-dependent content. The continued existence of the suffixed variables is redundant, and causes a maintenance burden. Population of the `COMPILE_DEFINITIONS_DEBUG` property may be replaced with a population of `COMPILE_DEFINITIONS` directly or via `target_compile_definitions()`:

    # Old Interfaces:
    set_property(TARGET tgt APPEND PROPERTY
      COMPILE_DEFINITIONS_DEBUG DEBUG_MODE
    )
    set_property(DIRECTORY APPEND PROPERTY
      COMPILE_DEFINITIONS_DEBUG DIR_DEBUG_MODE
    )

    # New Interfaces:
    set_property(TARGET tgt APPEND PROPERTY
      COMPILE_DEFINITIONS $<$<CONFIG:Debug>:DEBUG_MODE>
    )
    target_compile_definitions(tgt PRIVATE $<$<CONFIG:Debug>:DEBUG_MODE>)
    set_property(DIRECTORY APPEND PROPERTY
      COMPILE_DEFINITIONS $<$<CONFIG:Debug>:DIR_DEBUG_MODE>
    )

The `OLD` behavior for this policy is to consume the content of the suffixed `COMPILE_DEFINITIONS_<CONFIG>` target property when generating the compilation command. The `NEW` behavior for this policy is to ignore the content of the `COMPILE_DEFINITIONS_<CONFIG>` target property .

This policy was introduced in CMake version 3.0. CMake version 3.27.6 warns when the policy is not set and uses `OLD` behavior. Use the `cmake_policy()` command to set it to `OLD` or `NEW` explicitly.

Note

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