CheckPIESupported

加入版本 3.14。

檢查連結器是否支援用於執行檔的位置獨立碼(PIE)或非位置獨立碼(NO_PIE)。使用此命令以確保執行檔的 POSITION_INDEPENDENT_CODE 目標屬性在連結時會被採用。

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

選項為

OUTPUT_VARIABLE <output>

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

LANGUAGES <lang>...

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

CCXXFortran 受到支援。

加入版本 3.23:OBJCOBJCXXCUDAHIP 受到支援。

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

變數

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

CMAKE_<lang>_LINK_PIE_SUPPORTED

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

CMAKE_<lang>_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()