INTERFACE_INCLUDE_DIRECTORIES¶
程式庫公開的包含目錄需求列表。
目標可以填充此屬性,以發佈針對目標標頭檔編譯所需的包含目錄。target_include_directories()
命令會使用給定的 PUBLIC
和 INTERFACE
關鍵字的值來填充此屬性。專案也可以直接取得和設定此屬性。
當使用 target_link_libraries()
指定目標相依性時,CMake 會從所有目標相依性讀取此屬性,以確定使用者的建置屬性。
INTERFACE_INCLUDE_DIRECTORIES
的內容可以使用 "產生器表達式",語法為 $<...>
。請參閱 cmake-generator-expressions(7)
手冊以取得可用的表達式。請參閱 cmake-buildsystem(7)
手冊以取得更多關於定義建置系統屬性的資訊。
包含目錄的使用需求通常在建置樹和安裝樹之間有所不同。可以使用 BUILD_INTERFACE
和 INSTALL_INTERFACE
產生器表達式,根據使用位置描述不同的使用需求。INSTALL_INTERFACE
表達式中允許使用相對路徑,並且會根據安裝前綴進行解析。例如
target_include_directories(mylib INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/mylib>
$<INSTALL_INTERFACE:include/mylib> # <prefix>/include/mylib
)
建立可重定位的套件¶
請注意,不建議使用相依項的包含目錄的絕對路徑來填充目標的 INSTALL_INTERFACE
的 INTERFACE_INCLUDE_DIRECTORIES
。這會在已安裝的套件中硬編碼相依項的包含目錄路徑,如同在製作套件的機器上找到的一樣。
INTERFACE_INCLUDE_DIRECTORIES
的 INSTALL_INTERFACE
僅適用於指定目標本身提供的標頭檔的必要包含目錄,而不是其 INTERFACE_LINK_LIBRARIES
目標屬性中列出的可傳遞相依項所提供的那些。這些相依項本身應該是目標,在其 INTERFACE_INCLUDE_DIRECTORIES
中指定自己的標頭檔位置。
請參閱 建立可重定位的套件 區段,位於 cmake-packages(7)
手冊中,以了解在為重新發布建立套件時,指定使用需求時必須額外注意的事項。