使用CMake创建C++库后,跨项目引用头文件失败求助
解决CMake依赖库头文件无法访问的问题
问题根源
你的prg1f-io库的CMakeLists.txt未配置公开的头文件搜索目录。虽然设置了PUBLIC_HEADER属性,但该属性仅作用于库的install安装流程,无法在编译阶段为依赖项目自动提供头文件路径,导致测试项目找不到头文件。
修复步骤
修改prg1f-io库的CMakeLists.txt,在add_library指令后添加target_include_directories配置,将库的include目录标记为公开:
add_library(prg1f-io STATIC src/display.cpp) # 新增以下配置,公开头文件目录 target_include_directories(prg1f-io PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}> ) set_target_properties(prg1f-io PROPERTIES VERSION ${PROJECT_VERSION}) set_target_properties(prg1f-io PROPERTIES PUBLIC_HEADER include/display.h) ...
$<BUILD_INTERFACE:...>:用于库的本地编译或通过FetchContent构建场景,指定当前项目中include目录的路径$<INSTALL_INTERFACE:...>:用于库被安装到系统后的场景,对应头文件的安装路径
测试项目调整
修复库的配置后,测试项目的main.cpp只需使用标准包含方式:
#include <display.h>
测试项目的CMakeLists.txt无需额外修改,target_link_libraries会自动将库的公开头文件路径传递给可执行文件的编译流程。
内容的提问来源于stack exchange,提问作者ineiti
相关产品推荐
相关产品推荐

