CheckPIESupported¶
3.14 版本加入。
检查链接器是否支持可执行文件的位置无关代码(PIE)或非位置无关代码(NO_PIE)。使用此命令以确保 POSITION_INDEPENDENT_CODE
目标属性对于可执行文件在链接时能够生效。
- check_pie_supported¶
check_pie_supported([OUTPUT_VARIABLE <output>] [LANGUAGES <lang>...])
选项包括:
OUTPUT_VARIABLE <output>
设置
<output>
变量,其中包含关于任何错误的详细信息。如果由于使用了先前调用的缓存结果而绕过检查,则即使之前的调用中存在错误,输出也将为空。LANGUAGES <lang>...
检查用于每个指定语言的链接器。如果未提供此选项,则命令将检查所有已启用的语言。
C
,CXX
,Fortran
受支持。3.23 版本加入:
OBJC
,OBJCXX
,CUDA
, 和HIP
受支持。
当 CMP0083
设置为 OLD
时,使用此模块没有意义,因此在这种情况下,该命令将返回错误。有关详细信息,请参阅策略 CMP0083
。
变量¶
对于检查的每种语言,定义了两个布尔缓存变量。
CMAKE_<lang>_LINK_PIE_SUPPORTED
如果链接器支持
PIE
,则设置为 true,否则为 false。CMAKE_<lang>_LINK_NO_PIE_SUPPORTED
如果链接器支持
NO_PIE
,则设置为 true,否则为 false。
示例¶
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()