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
)

创建可重定位的软件包

请注意,不建议使用依赖项包含目录的绝对路径填充目标的 INTERFACE_INCLUDE_DIRECTORIESINSTALL_INTERFACE。 这会将依赖项的包含目录路径硬编码到已安装的软件包中,就像在制作软件包的机器上找到的那样

INTERFACE_INCLUDE_DIRECTORIESINSTALL_INTERFACE 仅适用于指定目标本身提供的标头的所需包含目录,而不适用于其 INTERFACE_LINK_LIBRARIES 目标属性中列出的传递依赖项提供的标头。 这些依赖项本身应该是目标,这些目标在 INTERFACE_INCLUDE_DIRECTORIES 中指定了自己的标头位置。

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