You need to enable JavaScript to run this app. CMake编译C++项目提示找不到头文件,现有配置该如何修正?
优惠活动
大模型
产品
解决方案
定价
更多

CMake编译C++项目提示找不到头文件,现有配置该如何修正?

问题原因与解决方案

1 CMake指令使用错误

你混淆了include_directories和target_include_directories的语法规则:

  • include_directories是全局头文件搜索路径设置指令,不需要传入目标名、作用域参数(PUBLIC/PRIVATE等),你写的include_directories(search PUBLIC include)实际是把search、PUBLIC、include三个无效/错误路径加入了全局搜索列表,完全没有达到你要给search目标添加include目录的效果。
  • 针对单个目标设置头文件搜索路径应该使用现代CMake推荐的target_include_directories指令,正确语法为target_include_directories(目标名 作用域 路径),对应你的场景就是target_include_directories(search PUBLIC include)。

2 头文件引入路径与搜索路径不匹配

你设置的头文件搜索路径是项目根目录下的include文件夹,编译器会直接在该目录下检索你写的头文件路径:

  • 你代码中写的#include "include/utilities.hpp"会让编译器去include/include/utilities.hpp路径下找文件,该路径不存在,所以触发找不到头文件的报错。

可选修正方案(二选一即可)

方案A:修改代码中的头文件引入写法

把所有#include "include/utilities.hpp"改为#include "utilities.hpp",配合如下修正后的CMakeLists.txt:

cmake_minimum_required(VERSION 3.16.3)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
project(search VERSION 1.0.0)

add_executable(
    search
    source/utilities.cpp
    source/main.cpp
    include/utilities.hpp
)
target_include_directories(search PUBLIC include)

方案B:修改CMake中的头文件搜索路径

不改动现有代码的引入写法,将头文件搜索路径设置为项目根目录,修正后的CMakeLists.txt对应配置:

cmake_minimum_required(VERSION 3.16.3)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
project(search VERSION 1.0.0)

add_executable(
    search
    source/utilities.cpp
    source/main.cpp
    include/utilities.hpp
)
target_include_directories(search PUBLIC ${PROJECT_SOURCE_DIR})

注意事项

修改完成后需要删除原有构建目录下的所有缓存文件,重新执行cmake和make命令,避免旧缓存导致错误复现。

内容的提问来源于stack exchange,提问作者0sharp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 13:18:04