CMake报错“source directory does not contain CMakeLists.txt”的主因是当前目录无该文件,需确认路径、大小写、权限、编码及IDE正确加载方式。

当前目录不是项目根目录
最常见的情况是:你在终端里执行 cmake . 时,当前工作目录下压根没有 CMakeLists.txt。CMake 不会递归查找,它只看当前目录(或你显式指定的路径)有没有这个文件。
实操建议:
- 用
ls -la(Linux/macOS)或dir(Windows)确认当前目录是否真有CMakeLists.txt - 如果文件在
~/myproject/下,但你 cd 进了~/myproject/build,那就得先cd ..或直接运行cmake ../ - 注意大小写和拼写:
CMakeLists.txt是固定命名,cakelists.txt或CMakeList.txt都无效
CMakeLists.txt 被放在子目录里了
有些项目把 CMakeLists.txt 放在 src/、app/ 或 cmake/ 子目录中,而你却在父目录运行 cmake —— 这会导致 “source directory does not appear to contain CMakeLists.txt” 报错。
实操建议:
- 先全局搜索:
find . -name "CMakeLists.txt",定位真实位置 - 不要在上级目录硬凑;直接进入那个子目录再运行
cmake .,或用相对路径:cmake ./src - 若必须在上级构建(比如 ROS 工作空间),需确保顶层
CMakeLists.txt存在并正确调用add_subdirectory(src)
文件存在但 CMake 仍报错:权限或隐藏文件问题
文件明明在,ls 也能看到,但 CMake 就是读不到。这时候可能是文件权限不足,或者被某些工具误标为隐藏(如 macOS 的 .CMakeLists.txt)、编码异常(BOM 头)、甚至挂载点不可读。
实操建议:
- 检查权限:
ls -l CMakeLists.txt,确保你有读权限(至少-rw-r--r--) - 排除隐藏文件干扰:
ls -la | grep CMake,确认没多出点号前缀 - 用
file CMakeLists.txt查看编码,避免 Windows 换行符 + BOM 导致解析失败;必要时用dos2unix或 VS Code 保存为 UTF-8 无 BOM - 如果是网络/加密磁盘挂载目录,尝试复制到本地
/tmp再试
IDE(如 Qt Creator)只显示 CMakeLists.txt 不加载源码
这不是 CMake 报错,但用户常误以为“找不到”。Qt Creator 或 VS Code 打开项目后只显示一个文件,是因为它还没真正运行 CMake 解析整个依赖图——它只是把 CMakeLists.txt 当普通文本打开了。
实操建议:
- 在 Qt Creator 中,**必须通过“文件 → 打开文件或项目”,选中
CMakeLists.txt后勾选“作为项目打开”**,不能双击或右键“用 Qt Creator 打开” - 首次加载时,IDE 会自动创建构建目录(如
build-MyApp-Desktop_Qt_5_15_2_MinGW_64_bit-Default),并执行一次cmake ..;若卡住,看底部“General Messages”面板里的 CMake 输出 - VS Code 用户需装 CMake Tools 插件,并按
Ctrl+Shift+P→ “CMake: Select a Kit”,选对编译器后再触发配置


















