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)