Page MenuHomePhabricator

cmake 3.5.1 warns of deprecated old behavior in CMakeLists.txt
Closed, ResolvedPublic

Description

my cmake --version is 3.5.1
running ./configure prints 4x the following, still finishes successfully:

CMake Warning (dev) in CMakeLists.txt:
 Policy CMP0043 is not set: Ignore COMPILE_DEFINITIONS_<Config> properties.
  Run "cmake --help-policy CMP0043" for policy details.  Use the cmake_policy
  command to set the policy and suppress this warning.
This warning is for project developers.  Use -Wno-dev to suppress it.

From cmake --help-policy CMP0043:

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.5.1 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.

Event Timeline

Petrb claimed this task.