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()