cmake build_error ai_generated true

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

其他格式: JSON · Markdown 中文 · English
88%修复率
85%置信度
1证据数
2023-06-20首次发现

版本兼容性

版本状态引入弃用备注
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.

generic

官方文档

https://cmake.org/cmake/help/latest/command/target_sources.html

解决方案

  1. Verify the file exists at the exact path specified. Use ${CMAKE_CURRENT_SOURCE_DIR} for relative paths to avoid ambiguity.
  2. If the file was moved or renamed, update the CMakeLists.txt to match the new location or name.
  3. Use file(GLOB ...) to automatically collect source files, but note this is discouraged for production builds due to missing dependency tracking.

无效尝试

常见但无效的做法:

  1. 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.

  2. 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.

  3. 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.