CMake 错误:找不到源文件:/path/to/src/main.cpp。已尝试扩展名 .c .C .c++ .cc .cpp .cxx .cu .m .M .mm .h .hh .h++ .hm .hpp .hxx .in .txx .f .f90 .F .F90
CMake Error: Cannot find source file: /path/to/src/main.cpp. Tried extensions .c .C .c++ .cc .cpp .cxx .cu .m .M .mm .h .hh .h++ .hm .hpp .hxx .in .txx .f .f90 .F .F90
ID: cmake/target-sources-file-not-found
版本兼容性
| 版本 | 状态 | 引入 | 弃用 | 备注 |
|---|---|---|---|---|
| CMake 3.10 | active | — | — | — |
| CMake 3.16 | active | — | — | — |
| CMake 3.22 | active | — | — | — |
| CMake 3.27 | active | — | — | — |
根因分析
在 target_sources() 或 add_executable() 中指定的源文件在给定路径上不存在。
English
The source file specified in target_sources() or add_executable() does not exist on disk at the given path.
官方文档
https://cmake.org/cmake/help/latest/command/target_sources.html解决方案
-
Verify the file exists at the exact path specified. Use ${CMAKE_CURRENT_SOURCE_DIR} for relative paths to avoid ambiguity. -
If the file was moved or renamed, update the CMakeLists.txt to match the new location or name.
-
Use file(GLOB ...) to automatically collect source files, but note this is discouraged for production builds due to missing dependency tracking.
无效尝试
常见但无效的做法:
-
Adding the file with a different extension like .cpp vs .cc or .cxx in the CMakeLists.txt
90% 失败
CMake does not automatically rename files; the file must physically exist with the exact name listed. Changing the extension only works if the actual file matches.
-
Removing the target and re-adding without the missing file, assuming it's optional
75% 失败
If the file is required for compilation, removing it will cause linker errors later. This only works if the file is genuinely unused.
-
Using an absolute path that includes the build directory instead of source directory
85% 失败
CMake expects source files relative to the source tree, not build tree. Using build directory paths causes confusion and does not fix the missing file.