CheckPIESupported

在 3.14 版本新增。

檢查連結器是否支援可執行檔的位置無關碼 (Position Independent Code, PIE) 或非位置無關碼 (No Position Independent Code, NO_PIE)。使用此命令確保可執行檔的 POSITION_INDEPENDENT_CODE 目標屬性在連結時會被遵循。

check_pie_supported
check_pie_supported([OUTPUT_VARIABLE <output>]
                    [LANGUAGES <lang>...])

選項如下

OUTPUT_VARIABLE <輸出>

設定 <輸出> 變數,以包含任何錯誤的詳細資訊。如果檢查因使用先前呼叫的快取結果而被繞過,即使先前的呼叫中存在錯誤,輸出也將為空。

LANGUAGES <語言>...

檢查用於每個指定語言的連結器。如果未提供此選項,則命令會檢查所有已啟用的語言。

支援 CCXXFortran

在 3.23 版本新增: 支援 OBJCOBJCXXCUDAHIP

CMP0083 設定為 OLD 時,使用此模組沒有意義,因此命令在這種情況下將返回錯誤。有關詳細資訊,請參閱政策 CMP0083

變數

對於每個檢查的語言,都會定義兩個布林快取變數。

CMAKE_<語言>_LINK_PIE_SUPPORTED

如果連結器支援 PIE,則設定為 true,否則設定為 false。

CMAKE_<語言>_LINK_NO_PIE_SUPPORTED

如果連結器支援 NO_PIE,則設定為 true,否則設定為 false。

範例

check_pie_supported()
set_property(TARGET foo PROPERTY POSITION_INDEPENDENT_CODE TRUE)
# Retrieve any error message.
check_pie_supported(OUTPUT_VARIABLE output LANGUAGES C)
set_property(TARGET foo PROPERTY POSITION_INDEPENDENT_CODE TRUE)
if(NOT CMAKE_C_LINK_PIE_SUPPORTED)
  message(WARNING "PIE is not supported at link time: ${output}.\n"
                  "PIE link options will not be passed to linker.")
endif()