CMP0083¶
3.14 版新增。
为了控制生成位置无关可执行文件(PIE
)或不生成,在链接时需要一些标志。
CMake 3.13 及更低版本在设置 POSITION_INDEPENDENT_CODE
时未添加这些链接标志。
此策略的 OLD
行为是不管理 PIE
链接标志。NEW
行为是如果设置了 POSITION_INDEPENDENT_CODE
则添加链接标志。
设置为
TRUE
:生成位置无关可执行文件的标志被传递到链接器步骤。例如,GCC
的-pie
。设置为
FALSE
:不生成位置无关可执行文件的标志被传递到链接器步骤。例如,GCC
的-no-pie
。未设置:没有标志被传递到链接器步骤。
由于给定的链接器可能不支持所有使用环境中 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)