检查PIES支持¶
在 3.14 版本加入.
检查链接器是否支持可执行文件的位置独立代码 (PIE) 或无位置独立代码 (NO_PIE)。使用它来确保:prop_tgt:POSITION_INDEPENDENT_CODE 可执行文件的目标属性将在链接时得到遵守。
- check_pie_supported¶
check_pie_supported([OUTPUT_VARIABLE <output>] [LANGUAGES <lang>...])选项是:
OUTPUT_VARIABLE <输出>使用有关任何错误的详细信息设置
<output>变量。如果检查因为使用先前调用的缓存结果而被绕过,则即使先前调用中存在错误,输出也将为空。语言 <lang>...检查用于每种指定语言的链接器。如果未提供此选项,该命令将检查所有启用的语言。
支持``C``、
CXX、Fortran。在 3.23 版本加入: 支持``OBJC``、
OBJCXX、CUDA和``HIP``。
当 CMP0083 设置为 OLD 时使用此模块没有任何意义,因此在这种情况下该命令将返回错误。有关详细信息,请参阅政策:policy: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()