如何正确组织CMake项目层级结构解决头文件找不到编译错误
问题根因
- 根目录CMakeLists未提前声明
app目标:调用target_link_libraries、target_sources操作app前,没有通过add_executable(app)创建对应的可执行目标,本身就会触发CMake配置错误。 - 驱动库的公开包含路径配置错误:lib目录CMakeLists中使用的
${PROJECTNAME_PATH}属于未定义变量,且路径指向不符合你#include <lib/driver/driver.h>的搜索规则。
修正方案
1. 根目录CMakeLists.txt调整
先声明app目标再做后续配置,示例完整配置:
cmake_minimum_required(VERSION 3.16) # 可替换为你需要的最低兼容版本 project(projectname) # 先创建可执行目标 add_executable(app) add_subdirectory(lib) target_sources(app PRIVATE src/main.c) target_link_libraries(app PRIVATE driver)
2. lib目录CMakeLists.txt调整
修改公开包含路径匹配你的头文件引用规则:
add_library( driver driver/driver.h driver/driver.c ) # 保留 #include <lib/driver/driver.h> 写法的配置 target_include_directories(driver PUBLIC ${PROJECT_SOURCE_DIR}) # 【推荐优化】如果要简化头文件引用为 #include <driver/driver.h>,替换为下面的配置即可 # target_include_directories(driver PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
如果选择了上面的优化配置,记得把main.c中的头文件引用同步修改为#include <driver/driver.h>,路径层级更短更规范。
内容的提问来源于stack exchange,提问作者aulait
相关产品推荐
相关产品推荐

