CMP0083¶
在 3.14 版本中新增。
為了控制是否產生位置獨立執行檔(Position Independent Executable,PIE
),在連結時需要一些標誌。
當 POSITION_INDEPENDENT_CODE
設定時,CMake 3.13 和更早版本不會加入這些連結標誌。
此政策的 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)