根本原因是cmakelists.txt与源文件不在同一级目录,或add_executable中文件名与磁盘实际文件名(大小写、扩展名、路径)不完全一致;windows文件系统虽不区分大小写,但cmake严格按字面匹配。

cmake .. 为什么报错说找不到源文件
根本原因通常是 CMakeLists.txt 和源文件没放在同一级目录,或者 add_executable 中写的文件名和实际文件名不一致(大小写、扩展名、路径都算)。Windows 文件系统默认不区分大小写,但 CMake 解析时严格按字面匹配。
- 确认
main.cpp真的在运行cmake ..的上一级目录里,不是在src/或子文件夹下 -
add_executable(hello main.cpp)中的main.cpp必须和磁盘上文件名完全一致——比如你建的是Main.cpp或main.CPP,就会失败 - 如果源文件在子目录(如
src/main.cpp),add_executable参数就得写成src/main.cpp,不能只写main.cpp
Visual Studio 生成器选哪个才不踩坑
用 cmake -G 查看可用生成器,Windows 上最稳妥的是 "Visual Studio 17 2022"(对应 VS2022)或 "Visual Studio 16 2019"。别选 Ninja 或 MinGW Makefiles 除非你明确装了对应工具链并配好了环境变量。
- VS 生成器会自动识别你安装的 MSVC 编译器版本,不用手动指定
CMAKE_CXX_COMPILER - 如果只装了 VS Code + C++ 扩展,但没装 Visual Studio IDE 本体,
cmake -G "Visual Studio..."会失败——这时该换用"Ninja",前提是已装 Ninja 并加到 PATH - 命令行执行时,推荐用完整路径生成:
cmake -S . -B build -G "Visual Studio 17 2022",比cd build & cmake ..更可靠
build 目录放哪?能不能删
必须用 out-of-source 构建,即 build 目录不能和 CMakeLists.txt 同级,也不能在里面。它就是个临时产出区,随时可删,删了重来是常态。
- 推荐结构:
myproject/CMakeLists.txt+myproject/main.cpp,然后myproject/build/专门放构建产物 - 误把
build建在项目根目录下(和CMakeLists.txt平级)会导致 CMake 报错Source directory ... contains <cmakelists.txt></cmakelists.txt> - 删
build后再重新cmake -S . -B build,比反复cmake ..更干净,尤其改过CMakeLists.txt后
编译后找不到 .exe 文件
默认生成路径不是当前目录,而是 build/ 下的子目录,具体取决于生成器。VS 生成器会把 .exe 放在 build/Debug/ 或 build/Release/ 里,不是 build/ 根目录。
- 用
cmake --build build --config Debug编译后,去build/Debug/找hello.exe - 如果想让输出统一到
build/根目录,加一句set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})在project()后面 - VS GUI 里右键项目 → “设为启动项目” → F5 运行,比手动找 .exe 更直接











