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