INTERFACE_INCLUDE_DIRECTORIES

库的公共 include 目录需求列表。

目标可以填充此属性以发布编译针对目标头的 include 目录。 target_include_directories() 命令使用给 PUBLICINTERFACE 关键字的值填充此属性。项目也可以直接获取和设置属性。

当使用 target_link_libraries() 指定目标依赖时,CMake 将从所有目标依赖读取此属性以确定消费者的构建属性。

INTERFACE_INCLUDE_DIRECTORIES 的内容可以使用语法 $<...> 的“生成器表达式”。有关可用表达式的更多信息,请参阅 cmake-generator-expressions(7) 手册。有关构建系统属性定义的更多信息,请参阅 cmake-buildsystem(7) 手册。

在构建树和安装树之间的 include 目录使用要求通常不同。 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_INTERFACE 填充目标的 INTERFACE_INCLUDE_DIRECTORIES 的 include 目录。这会导致硬编码依赖项的 include 目录路径到已安装的包中,因为在制作包的机器上找到了依赖项

INSTALL_INTERFACEINTERFACE_INCLUDE_DIRECTORIES 仅适用于指定由目标自身提供的头所需的包含目录,而不适用于其 INTERFACE_LINK_LIBRARIES 目标属性中列出的传递依赖关系所提供的头。

有关在为重新分发构建包时指定使用要求时必须额外注意的事项的讨论,请参阅 cmake-packages(7) 手册的 创建可重新定位的包 部分。