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)