INTERFACE_INCLUDE_DIRECTORIES¶
库的公共包含目录需求列表。
目标(Targets)可以填充此属性,以发布编译依赖于该目标头文件时所需的包含目录。target_include_directories() 命令使用赋予 PUBLIC 和 INTERFACE 关键字的值来填充此属性。项目也可以直接获取和设置此属性。
当使用 target_link_libraries() 指定目标依赖项时,CMake 将会从所有目标依赖项读取此属性,以确定使用者(consumer)的构建属性。
INTERFACE_INCLUDE_DIRECTORIES 的内容可以使用语法为 $<...> 的“生成器表达式”。有关可用表达式,请参阅 cmake-generator-expressions(7) 手册。有关定义构建系统属性的更多信息,请参阅 cmake-buildsystem(7) 手册。
包含目录的使用需求在构建树(build-tree)和安装树(install-tree)之间通常有所不同。BUILD_INTERFACE 和 INSTALL_INTERFACE 生成器表达式可用于根据使用位置描述不同的使用需求。INSTALL_INTERFACE 表达式中允许使用相对路径,并将被解释为相对于安装前缀(installation prefix)。例如
target_include_directories(mylib INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/mylib>
$<INSTALL_INTERFACE:include/mylib> # <prefix>/include/mylib
)
创建可重定位包¶
请注意,不建议在目标的 INTERFACE_INCLUDE_DIRECTORIES 的 INSTALL_INTERFACE 中填充依赖项包含目录的绝对路径。这将把在创建软件包的机器上找到的依赖项包含目录路径硬编码到已安装的软件包中。
INTERFACE_INCLUDE_DIRECTORIES 的 INSTALL_INTERFACE 仅适用于指定目标自身提供的头文件所需的包含目录,而不适用于其 INTERFACE_LINK_LIBRARIES 目标属性中列出的传递依赖项所提供的头文件。这些依赖项本身应该作为目标,并在其各自的 INTERFACE_INCLUDE_DIRECTORIES 中指定它们自己的头文件位置。
有关创建可重定位包(relocatable packages)时在指定使用需求时需要注意的额外事项的讨论,请参阅 cmake-packages(7) 手册的 创建可重定位包 部分。