CMP0083¶
3.14 版本中添加。
要控制生成位置无关可执行文件(PIE
)与否,链接时需要一些标志。
CMake 3.13 和更低版本在设置 POSITION_INDEPENDENT_CODE
时不会添加这些链接标志。
此策略的 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
标志。
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)