讲师中心 微信公众号
AI工具推荐 视频效率加速

CMake里的add_executable报错怎么处理?

大晨同学_5715

大晨同学_5715

发布时间:2026-08-08 18:22:19

|

282人浏览过

|

来源于php中文网

原创

CMake报“Cannot find source file”是因为只在CMAKE_CURRENT_SOURCE_DIR下查找路径,需用ls/dir验证物理路径是否存在;“No SOURCES given”则因add_executable后未指定文件或变量为空,应检查语法和变量定义顺序。

cmake里的add_executable报错怎么处理?

“Cannot find source file” 是路径没对上

这个错误不是 CMake 故意刁难,而是它老老实实按规则找文件——只在 CMAKE_CURRENT_SOURCE_DIR(当前 CMakeLists.txt 所在目录)下查你写的路径。比如你在项目根目录写了 add_executable(main src/main.cpp),CMake 就会去 ./src/main.cpp 找;但如果 main.cpp 实际在 ./src/core/main.cpp,它就找不到。

  • 用 ls -l ${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp(Linux/macOS)或 dir %CD%\src\main.cpp(Windows)直接验证路径是否存在
  • 别依赖 IDE 的“看起来在那儿”,终端里 pwd + ls 才是真相
  • 如果源文件在子目录的 CMakeLists.txt 里定义,父目录的 add_executable 不能直接引用它——变量不跨作用域,得显式写相对路径或用 file(GLOB_RECURSE)

“No SOURCES given to target” 说明根本没传文件进去

这通常不是路径问题,而是语法或逻辑断了链:目标名后面压根没跟任何源文件,或者你用了变量但变量是空的。

C++14
C++14

C++14 对 C++11 的修正与增强版本,适合旧系统维护和较老工具链兼容。

下载
  • 检查 add_executable 调用是否形如 add_executable(myapp main.cpp) —— 第一个参数是目标名,后面必须至少有一个源文件
  • 如果用了变量(比如 set(SRCS src/main.cpp)),加一行 message(STATUS "SRCS = ${SRCS}") 看输出是不是空;常见原因是 set() 写在了 add_executable 后面,或者 file(GLOB) 没匹配到任何文件(比如扩展名拼错、大小写不符)
  • ROS 项目里常写成 add_executable(${PROJECT_NAME}_node src/node.cpp),注意 ${PROJECT_NAME} 必须已通过 project() 正确定义,否则展开为空,变成 add_executable(_node src/node.cpp),路径又错一层

file(GLOB) 看似省事,其实埋雷最多

file(GLOB_RECURSE SRCS "src/*.cpp") 这种写法容易让新手觉得“一劳永逸”,但它有三个硬伤:

  • 不会自动感知新增文件:改完 CMakeLists.txt 后,新加的 .cpp 文件不会被自动加入构建,除非手动删掉 build/ 目录重来
  • 可能误吞不该编译的文件:比如 src/test_main.cpp 或临时生成的 src/generated.cpp,全被扫进去了
  • 路径拼错时静默失败:如果 "src/*.cpp" 实际该写成 "./src/*.cpp" 或 "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp",GLOB 可能返回空列表,但 CMake 不报错,直到 add_executable 那行才爆 No SOURCES

多级 CMakeLists.txt 下最容易漏掉 add_subdirectory

如果你把 src/CMakeLists.txt 单独写了 add_executable,但根目录的 CMakeLists.txt 里没写 add_subdirectory(src),那整个 src/ 目录下的配置根本不会执行——CMake 不会自动递归扫描子目录。

  • 子目录的 CMakeLists.txt 只有被 add_subdirectory() 显式调用,里面的命令才生效
  • 子目录里的 add_executable 定义的目标,父目录无法直接引用(比如 target_link_libraries 里写子目录目标名会失败),必须用 add_subdirectory 接入后才能跨目录依赖
  • CLion 或 VS Code 的 CMake 插件有时会“假装”加载了子目录配置,但实际 cmake .. 时没走 add_subdirectory,构建照样失败
真正卡住人的地方,往往不是语法记不住,而是 CMake 的路径解析和作用域规则不透明——它不告诉你“为什么没找到”,只甩一句“Cannot find source file”。每次遇到,先 message() 打印变量,再终端里 ls 验证物理路径,比瞎改 add_executable 行有效得多。

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

更多
C++ 跨平台开发
C++ 跨平台开发

本专题聚焦 C++ 在跨平台应用与工程构建中的实战应用,系统讲解 CMake 构建系统、跨平台编译配置、第三方库集成、调试技巧、静态与动态链接库管理等核心知识。通过实战案例(如跨平台工具开发、Linux与Windows编译兼容性项目),帮助学习者掌握 从环境配置到完整跨平台构建的开发能力。

6726

2025.10.17

c++  cmake用法
c++ cmake用法

本专题整合了c++ cmake用法相关教程,阅读专题下面的文章了解更多详细内容。

1611

2025.10.23

C++ 编译构建系统与CMake实战
C++ 编译构建系统与CMake实战

本专题聚焦 C++ 项目的编译与构建体系,系统讲解 CMake 的核心语法、项目结构设计、库与依赖管理、跨平台构建、调试与发布配置。通过完整项目示例,帮助开发者掌握 从源码到可执行程序的工程化构建流程,提升 C++ 项目在实际开发中的可维护性与扩展性。

354

2025.12.13

剧云故事大纲与分场规划教程
剧云故事大纲与分场规划教程

本专题讲解剧云梗概与多级大纲功能,覆盖全局、分集、分场结构生成,以及主线冲突、剧情节点和场次顺序调整。

0

2026.10.22

VibeKnow PPT讲解视频教程汇总
VibeKnow PPT讲解视频教程汇总

本专题介绍VibeKnow PPT讲解模式的素材准备、旁白生成、页面节奏、画面呈现与导出设置,适合课程和培训场景。

0

2026.10.22

VibeKnow PDF转视频教程合集
VibeKnow PDF转视频教程合集

本专题围绕VibeKnow的PDF转视频功能,讲解文件准备、内容解析、脚本生成、重点可视化及配音字幕检查方法。

0

2026.10.22

二狗PPT模板与视觉设计
二狗PPT模板与视觉设计

本专题介绍二狗PPT的职场模板、主题风格与页面版式,覆盖模板切换、色彩选择、内容匹配和正式汇报场景下的视觉优化方法。

0

2026.10.22

php漏洞修复方法
php漏洞修复方法

PHP漏洞聚合专题,持续整理PHP最新高危漏洞、CVE安全预警、受影响版本、自查命令及修复方案,覆盖PHP-FPM、Docker、Ubuntu与Linux服务器环境,帮助开发者快速完成漏洞排查、版本升级和安全加固。

0

2026.10.22

二狗PPT入门与基础操作
二狗PPT入门与基础操作

本专题整理二狗PPT从官网进入、输入主题、生成大纲到制作成稿的基础操作,帮助新手掌握AI一键生成职场PPT的完整流程。

0

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
LLVM CMake构建指南
LLVM CMake构建指南

共0课时 | 0人学习

LLVM入门手册
LLVM入门手册

共0课时 | 0人学习

CMake 与 Conan 集成实践
CMake 与 Conan 集成实践

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn