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 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 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.14.3 does not warn when this policy is not set and simply uses OLD behavior.

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)