INTERFACE_INCLUDE_DIRECTORIES

程式庫公開的包含目錄需求列表。

目標可以填充此屬性,以發佈針對目標標頭檔編譯所需的包含目錄。target_include_directories() 命令會使用給定的 PUBLICINTERFACE 關鍵字的值來填充此屬性。專案也可以直接取得和設定此屬性。

當使用 target_link_libraries() 指定目標相依性時,CMake 會從所有目標相依性讀取此屬性,以確定使用者的建置屬性。

INTERFACE_INCLUDE_DIRECTORIES 的內容可以使用 "產生器表達式",語法為 $<...>。請參閱 cmake-generator-expressions(7) 手冊以取得可用的表達式。請參閱 cmake-buildsystem(7) 手冊以取得更多關於定義建置系統屬性的資訊。

包含目錄的使用需求通常在建置樹和安裝樹之間有所不同。可以使用 BUILD_INTERFACEINSTALL_INTERFACE 產生器表達式,根據使用位置描述不同的使用需求。INSTALL_INTERFACE 表達式中允許使用相對路徑,並且會根據安裝前綴進行解析。例如

target_include_directories(mylib INTERFACE
  $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/mylib>
  $<INSTALL_INTERFACE:include/mylib>  # <prefix>/include/mylib
)

建立可重定位的套件

請注意,不建議使用相依項的包含目錄的絕對路徑來填充目標的 INSTALL_INTERFACEINTERFACE_INCLUDE_DIRECTORIES。這會在已安裝的套件中硬編碼相依項的包含目錄路徑,如同在製作套件的機器上找到的一樣

INTERFACE_INCLUDE_DIRECTORIESINSTALL_INTERFACE 僅適用於指定目標本身提供的標頭檔的必要包含目錄,而不是其 INTERFACE_LINK_LIBRARIES 目標屬性中列出的可傳遞相依項所提供的那些。這些相依項本身應該是目標,在其 INTERFACE_INCLUDE_DIRECTORIES 中指定自己的標頭檔位置。

請參閱 建立可重定位的套件 區段,位於 cmake-packages(7) 手冊中,以了解在為重新發布建立套件時,指定使用需求時必須額外注意的事項。