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
)
创建可重定位包¶
请注意,不建议使用依赖项包含目录的绝对路径填充目标的 INTERFACE_INCLUDE_DIRECTORIES
的 INSTALL_INTERFACE
。那会将依赖项的包含目录路径硬编码到已安装的包中,这些路径是**在创建包的机器上找到的**。
INTERFACE_INCLUDE_DIRECTORIES
的 INSTALL_INTERFACE
仅适用于指定目标本身提供的头文件所需的包含目录,而不适用于其 INTERFACE_LINK_LIBRARIES
目标属性中列出的传递依赖项提供的头文件。这些依赖项本身应该是目标,它们在 INTERFACE_INCLUDE_DIRECTORIES
中指定自己的头文件位置。
有关在创建可再发行包时指定使用要求时必须采取的额外注意事项的讨论,请参阅 cmake-packages(7)
手册的创建可重定位包部分。