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)
手冊的 建立可重新定位的套件 章節,以討論在為重新發布建立套件時,指定使用需求時必須格外小心。