CMP0083
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 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 POSITION_INDEPENDENT_CODE
is set:
- Set to
TRUE
: flags to produce a position independent executable are passed to the linker step. For example-pie
forGCC
. - Set to
FALSE
: flags not to produce a position independent executable are passed to the linker step. For example-no-pie
forGCC
. - 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 CheckPIESupported
module to check for support to ensure that the POSITION_INDEPENDENT_CODE
target property for executables will be honored at link time.
This policy was introduced in CMake version 3.14. Use the cmake_policy()
command to set it to OLD
or NEW
explicitly. Unlike most policies, CMake version 3.17.5 does not warn when this policy is not set and simply uses OLD
behavior.
Note
Android platform has a special handling of PIE
so it is not required to use the CheckPIESupported
module to ensure flags are passed to the linker.
Note
The OLD
behavior of a policy is deprecated by definition
and may be removed in a future version of CMake.
Examples
Behave like CMake 3.13 and do not apply any PIE
flags at link stage.
cmake_minimum_required(VERSION 3.13) project(foo) # ... add_executable(foo ...) set_property(TARGET foo PROPERTY POSITION_INDEPENDENT_CODE TRUE)
Use the CheckPIESupported
module to detect whether PIE
is supported by the current linker and environment. Apply PIE
flags only if the linker supports them.
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)
© 2000–2020 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.17/policy/CMP0083.html