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