INTERFACE_INCLUDE_DIRECTORIES

公共列表 |property_name|对图书馆的要求。

目标可以填充此属性以发布 |property_name|需要针对目标的标头进行编译。 |命令名称|命令使用赋予 PUBLICINTERFACE 关键字的值填充此属性。项目也可以直接获取和设置属性。

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

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

包含目录的使用要求通常在构建树和安装树之间有所不同。 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_DIRECTORIES 的 :genex:`INSTALL_INTERFACE`具有到依赖项包含目录的绝对路径的目标。这会将硬编码到已安装的包中,包括依赖项的目录路径**在创建包的机器上**。

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

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