Help: Clarify behavior of BEFORE with target_compile_options()

This commit is contained in:
Craig Scott
2022-11-27 20:35:14 +11:00
parent dd3482f675
commit ab5aeca849
2 changed files with 18 additions and 9 deletions

View File

@@ -19,7 +19,8 @@ Arguments
^^^^^^^^^
If ``BEFORE`` is specified, the content will be prepended to the property
instead of being appended.
instead of being appended. See policy :policy:`CMP0101` which affects
whether ``BEFORE`` will be ignored in certain cases.
The ``INTERFACE``, ``PUBLIC`` and ``PRIVATE`` keywords are required to
specify the :ref:`scope <Target Usage Requirements>` of the following arguments.

View File

@@ -3,16 +3,24 @@ CMP0101
.. versionadded:: 3.17
:command:`target_compile_options` now honors ``BEFORE`` keyword in all scopes.
:command:`target_compile_options` now always honors the ``BEFORE`` keyword.
In CMake 3.16 and below the :command:`target_compile_options` ignores the
``BEFORE`` keyword in private scope. CMake 3.17 and later honors
``BEFORE`` keyword in all scopes. This policy provides compatibility for
projects that have not been updated to expect the new behavior.
In CMake 3.16 and below, the :command:`target_compile_options` command
ignores the ``BEFORE`` keyword when inserting items into the
:prop_tgt:`COMPILE_OPTIONS` target property (``PRIVATE`` and ``PUBLIC``
items). CMake 3.17 and later honors the ``BEFORE`` keyword in all cases.
This policy provides compatibility for projects that have not been updated
to expect the new behavior.
The ``OLD`` behavior for this policy is to not honor ``BEFORE`` keyword in
private scope. The ``NEW`` behavior of this policy is to honor
``BEFORE`` keyword in all scopes.
The behavior of inserting items into the :prop_tgt:`INTERFACE_COMPILE_OPTIONS`
target property (``PUBLIC`` and ``INTERFACE`` items) is not affected by this
policy. The ``BEFORE`` keyword has always been honored when adding items to
:prop_tgt:`INTERFACE_COMPILE_OPTIONS`.
The ``OLD`` behavior for this policy is to not honor the ``BEFORE`` keyword
when inserting into the :prop_tgt:`COMPILE_OPTIONS` property.
The ``NEW`` behavior for this policy is to honor the ``BEFORE`` keyword in
all cases.
This policy was introduced in CMake version 3.17. Use the
:command:`cmake_policy` command to set it to ``OLD`` or ``NEW`` explicitly.