CMP0083¶
在 3.14 版本加入.
要控制是否生成位置独立可执行文件(PIE),链接时需要一些标志。
设置 POSITION_INDEPENDENT_CODE 时,CMake 3.13 及更低版本未添加这些链接标志。
此策略的“旧”行为是不管理“PIE”链接标志。如果 POSITION_INDEPENDENT_CODE 被设置,NEW 行为是添加链接标志:
设置为“真”:生成位置独立可执行文件的标志被传递到链接器步骤。例如
-pie用于GCC。设置为“FALSE”:不生成与位置无关的可执行文件的标志将传递到链接器步骤。例如,
-no-pie用于``GCC``。未设置:没有标志传递给链接器步骤。
由于给定的链接器可能不会在所有使用它的环境中都支持``PIE``标志,因此项目有责任使用 CheckPIESupported 模块来检查支持以确保 POSITION_INDEPENDENT_CODE ` 可执行文件的目标属性将在链接时生效。
此策略是在 CMake 版本 3.14 中引入的。使用 cmake_policy() 命令将其显式设置为 OLD 或 NEW。与大多数政策不同,CMake 版本 |release|未设置此策略时不会发出警告,只是使用“旧”行为。
备注
Android 平台对 PIE 有特殊处理,因此不需要使用 CheckPIESupported 模块来确保将标志传递给链接器。
备注
策略的“旧”行为是 :manual:根据定义 <cmake-policies(7)> 已弃用,并且可能会在未来版本的 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)