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>...
檢查用於每個指定語言的連結器。如果未提供此選項,則命令會檢查所有已啟用的語言。
C
、CXX
、Fortran
受到支援。加入版本 3.23:
OBJC
、OBJCXX
、CUDA
和HIP
受到支援。
當 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()