You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CMake编译报mymath.h: No such file or directory错误如何解决?

问题原因及修复方案

直接报错原因

核心问题有两个:

  • 顶层include_directories使用了相对路径,如果你采用常规的out-of-source构建(新建build目录后执行cmake ..),相对路径是相对于构建工作目录的,无法定位到源码树里的mymathlib/include路径
  • 库名拼写错误,上层链接时写的myamth和你定义的静态库名mymath不符,还会导致后续链接阶段报错

修复步骤

1. 修改顶层CMakeLists.txt

将相对路径改为基于${PROJECT_SOURCE_DIR}的绝对路径,同时修正库名拼写:

cmake_minimum_required(VERSION 3.10)
project(CALCULATOR)
# 改为绝对路径,确保不管在哪执行cmake都能正确定位头文件
include_directories(${PROJECT_SOURCE_DIR}/mymathlib/include)
add_subdirectory(mymathlib)
add_executable(calculator ${PROJECT_SOURCE_DIR}/main.c)
# 修正库名拼写错误,myamth改为mymath
target_link_libraries(calculator mymath)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
add_compile_options(-Wall -g)

2. 优化mymathlib下的CMakeLists.txt(可选,符合CMake现代规范)

建议使用target_include_directories替代全局的include_directories,这样链接该库的目标会自动继承头文件路径,无需上层单独配置:

project(MyMathLib)
aux_source_directory(src SRCS)
add_library(mymath STATIC ${SRCS})
# PUBLIC属性表示该头文件路径同时对当前库和链接该库的上层目标生效
target_include_directories(mymath PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)
set(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/lib)

修改完成后清空之前的构建缓存(删除build目录或CMakeCache.txt),重新执行构建流程即可解决问题。

内容的提问来源于stack exchange,提问作者C.C

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 18:03:03