CheckPIESupported — CMake 4.0.1 Documentation (original) (raw)
Added in version 3.14.
Check whether the linker supports Position Independent Code (PIE) or No Position Independent Code (NO_PIE) for executables. Use this to ensure that the POSITION_INDEPENDENT_CODE target property for executables will be honored at link time.
check_pie_supported¶
check_pie_supported([OUTPUT_VARIABLE ] [LANGUAGES ...])
Options are:
OUTPUT_VARIABLE <output>
Set <output>
variable with details about any error. If the check is bypassed because it uses cached results from a previous call, the output will be empty even if errors were present in the previous call.
LANGUAGES <lang>...
Check the linkers used for each of the specified languages. If this option is not provided, the command checks all enabled languages.
C
, CXX
, Fortran
are supported.
Added in version 3.23: OBJC
, OBJCXX
, CUDA
, and HIP
are supported.
It makes no sense to use this module when CMP0083 is set to OLD
, so the command will return an error in this case. See policy CMP0083for details.
Variables¶
For each language checked, two boolean cache variables are defined.
CMAKE_<lang>_LINK_PIE_SUPPORTED
Set to true if
PIE
is supported by the linker and false otherwise.
CMAKE_<lang>_LINK_NO_PIE_SUPPORTED
Set to true if
NO_PIE
is supported by the linker and false otherwise.
Examples¶
check_pie_supported() set_property(TARGET foo PROPERTY POSITION_INDEPENDENT_CODE TRUE)
Retrieve any error message.
check_pie_supported(OUTPUT_VARIABLE output LANGUAGES C) set_property(TARGET foo PROPERTY POSITION_INDEPENDENT_CODE TRUE) if(NOT CMAKE_C_LINK_PIE_SUPPORTED) message(WARNING "PIE is not supported at link time: ${output}.\n" "PIE link options will not be passed to linker.") endif()