target_link_directories¶
版本 3.13 新增。
為目標加入連結目錄。
target_link_directories(<target> [BEFORE]
<INTERFACE|PUBLIC|PRIVATE> [items1...]
[<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
指定連結器在連結指定目標時應搜尋程式庫的路徑。每個項目可以是絕對或相對路徑,後者會被解釋為相對於目前的原始碼目錄。這些項目將會被加入到連結命令中。
指定的 <target>
必須是由 add_executable()
或 add_library()
之類的命令所建立,且不能是 別名目標。
必須使用 INTERFACE
、PUBLIC
和 PRIVATE
關鍵字來指定其後項目的範圍。PRIVATE
和 PUBLIC
項目將會填充 <target>
的 LINK_DIRECTORIES
屬性。PUBLIC
和 INTERFACE
項目將會填充 <target>
的 INTERFACE_LINK_DIRECTORIES
屬性(匯入目標僅支援 INTERFACE
項目)。每個項目都指定一個連結目錄,並在加入相關屬性之前,會先轉換為絕對路徑(如有需要)。對同一個 <target>
重複呼叫會依照呼叫順序附加項目。
如果指定 BEFORE
,內容會被前置到相關屬性,而不是附加在後。
target_link_directories
的參數可以使用產生器運算式,語法為 $<...>
。請參閱 cmake-generator-expressions(7)
手冊以了解可用的運算式。請參閱 cmake-buildsystem(7)
手冊以了解更多關於定義建置系統屬性的資訊。
注意
此命令很少有必要,且在有其他選擇時應避免使用。盡可能優先將程式庫的完整絕對路徑傳遞過去,因為這樣可以確保始終連結到正確的程式庫。find_library()
命令會提供完整的路徑,通常可以直接用於呼叫 target_link_libraries()
。可能需要程式庫搜尋路徑的情況包括:
像是 Xcode 的專案產生器,使用者可以在建置時切換目標架構,但無法使用程式庫的完整路徑,因為它只提供一個架構(即它不是通用二進位檔)。
程式庫本身可能具有其他私有的程式庫相依性,這些相依性期望透過
RPATH
機制找到,但有些連結器無法完全解碼這些路徑(例如,由於存在像$ORIGIN
之類的東西)。