首页 > 解决方案 > 何时使用带有 target_include_directories 的 BUILD_INTERFACE 和 INSTALL_INTERFACE 生成器表达式?

问题描述

target_include_directories文档指出以下内容:

包含目录的使用要求通常在构建树和安装树之间有所不同。BUILD_INTERFACEINSTALL_INTERFACE生成器表达式可用于根据使用位置描述单独的使用要求。

我想让我的 CMake 库可安装,但我不确定这是否意味着我应该使用这些生成器表达式。目前,我的src/CMakeLists.txt包含以下内容:

target_include_directories(mylib PRIVATE ${CMAKE_SOURCE_DIR}/include/mylib)
target_include_directories(mylib INTERFACE ${CMAKE_SOURCE_DIR}/include)

这允许我在#include不指定父目录的情况下访问我的库的公共标题,同时仍然要求我的库的用户自己这样做。我的理解是,这是防止头文件名冲突的标准做法。

话虽这么说,我不相信这段代码能以目前的形式运行来安装库。解决此问题的首选方法通常是什么?

标签: c++cmake

解决方案


推荐阅读