CMP0083¶
在版本 3.14 中添加。
为了控制生成位置无关可执行文件 (PIE
),链接时需要一些标志。
当设置 POSITION_INDEPENDENT_CODE
时,CMake 3.13 及更低版本不会添加这些链接标志。
此策略的 OLD
行为是不管理 PIE
链接标志。NEW
行为是在设置 POSITION_INDEPENDENT_CODE
时添加链接标志
设置为
TRUE
:将生成位置无关可执行文件的标志传递给链接器步骤。例如,-pie
用于GCC
。设置为
FALSE
:将不生成位置无关可执行文件的标志传递给链接器步骤。例如,-no-pie
用于GCC
。未设置:不向链接器步骤传递任何标志。
由于给定的链接器可能不支持在其使用的所有环境中使用 PIE
标志,因此项目有责任使用 CheckPIESupported
模块来检查是否支持,以确保在链接时 POSITION_INDEPENDENT_CODE
目标属性对于可执行文件将被遵守。
此策略在 CMake 版本 3.14 中引入。它可以通过 cmake_policy()
或 cmake_minimum_required()
设置。如果未设置,CMake 不会发出警告,并使用 OLD
行为。
注意
Android 平台对 PIE
有特殊的处理方式,因此不需要使用 CheckPIESupported
模块来确保标志被传递到链接器。
注意
策略的 OLD
行为根据 定义已弃用
,并可能在未来的 CMake 版本中移除。
示例¶
行为类似于 CMake 3.13,并且在链接阶段不应用任何 PIE
标志。
cmake_minimum_required(VERSION 3.13)
project(foo)
# ...
add_executable(foo ...)
set_property(TARGET foo PROPERTY POSITION_INDEPENDENT_CODE TRUE)
使用 CheckPIESupported
模块来检测当前链接器和环境是否支持 PIE
。仅当链接器支持 PIE
时才应用 PIE
标志。
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)