如何在CMake中为INTERFACE库添加额外头文件目录适配包含路径
调整CMake配置实现头文件带路径包含
问题根源
你当前的CMake配置把LibA的include目录直接添加到了编译器的全局包含路径中,所以主项目可以直接通过#include "my_lib_header.h"引入头文件。要实现类似外部库的#include <myLib/my_lib_header.h>(或双引号形式)的引入方式,需要调整目录结构和对应CMake配置。
步骤1:调整LibA的目录结构
修改LibA的include目录层级,新增myLib子目录存放头文件,最终结构如下:
根目录 ├─ LibA │ ├─ CMakeLists.txt │ └─ include │ └─ myLib │ └─ my_lib_header.h └─ Project ├─ CMakeLists.txt └─ main.c
步骤2:修正LibA的CMake配置
保持target_include_directories的配置不变,因为我们需要让编译器把LibA/include作为根包含目录,这样头文件的路径myLib/my_lib_header.h就对应了包含语句的路径:
add_library(my_lib INTERFACE) # 这里依旧指定include为INTERFACE包含目录,编译器会从这里开始查找子目录 target_include_directories(my_lib INTERFACE ./include)
步骤3:修正主项目的CMake配置
主项目是可执行文件,target_link_libraries不应使用INTERFACE(INTERFACE用于库之间的依赖传递),改为PRIVATE即可:
add_executable(project main.c) target_link_libraries(project PRIVATE my_lib)
验证
现在主项目的main.c中就可以用以下方式引入头文件:
#include "myLib/my_lib_header.h" // 或者使用尖括号形式(效果一致,取决于项目规范) #include <myLib/my_lib_header.h>
内容的提问来源于stack exchange,提问作者segar
相关产品推荐
相关产品推荐

