
Every policy's documentation has a paragraph on what version of CMake introduced it, how to set the policy, and whether CMake warns if the policy is not set. The wording of this paragraph has diverged across policies over time. Factor the paragraph out into a standard advice document included by every policy.
71 lines
2.1 KiB
ReStructuredText
71 lines
2.1 KiB
ReStructuredText
CMP0083
|
|
-------
|
|
|
|
.. versionadded:: 3.14
|
|
|
|
To control generation of Position Independent Executable (``PIE``) or not, some
|
|
flags are required at link time.
|
|
|
|
CMake 3.13 and lower did not add these link flags when
|
|
:prop_tgt:`POSITION_INDEPENDENT_CODE` is set.
|
|
|
|
The ``OLD`` behavior for this policy is to not manage ``PIE`` link flags. The
|
|
``NEW`` behavior is to add link flags if :prop_tgt:`POSITION_INDEPENDENT_CODE`
|
|
is set:
|
|
|
|
* Set to ``TRUE``: flags to produce a position independent executable are
|
|
passed to the linker step. For example ``-pie`` for ``GCC``.
|
|
* Set to ``FALSE``: flags not to produce a position independent executable are
|
|
passed to the linker step. For example ``-no-pie`` for ``GCC``.
|
|
* Not set: no flags are passed to the linker step.
|
|
|
|
Since a given linker may not support ``PIE`` flags in all environments in
|
|
which it is used, it is the project's responsibility to use the
|
|
:module:`CheckPIESupported` module to check for support to ensure that the
|
|
:prop_tgt:`POSITION_INDEPENDENT_CODE` target property for executables will be
|
|
honored at link time.
|
|
|
|
.. |INTRODUCED_IN_CMAKE_VERSION| replace:: 3.14
|
|
.. |WARNS_OR_DOES_NOT_WARN| replace:: does *not* warn
|
|
.. include:: STANDARD_ADVICE.txt
|
|
|
|
.. Note::
|
|
|
|
Android platform has a special handling of ``PIE`` so it is not required
|
|
to use the :module:`CheckPIESupported` module to ensure flags are passed to
|
|
the linker.
|
|
|
|
.. include:: DEPRECATED.txt
|
|
|
|
Examples
|
|
^^^^^^^^
|
|
|
|
Behave like CMake 3.13 and do not apply any ``PIE`` flags at link stage.
|
|
|
|
.. code-block:: cmake
|
|
|
|
cmake_minimum_required(VERSION 3.13)
|
|
project(foo)
|
|
|
|
# ...
|
|
|
|
add_executable(foo ...)
|
|
set_property(TARGET foo PROPERTY POSITION_INDEPENDENT_CODE TRUE)
|
|
|
|
Use the :module:`CheckPIESupported` module to detect whether ``PIE`` is
|
|
supported by the current linker and environment. Apply ``PIE`` flags only
|
|
if the linker supports them.
|
|
|
|
.. code-block:: cmake
|
|
|
|
cmake_minimum_required(VERSION 3.14) # CMP0083 NEW
|
|
project(foo)
|
|
|
|
include(CheckPIESupported)
|
|
check_pie_supported()
|
|
|
|
# ...
|
|
|
|
add_executable(foo ...)
|
|
set_property(TARGET foo PROPERTY POSITION_INDEPENDENT_CODE TRUE)
|