# 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`
- **Domain:** cmake
- **Category:** build_error
- **Verification:** ai_generated
- **Fix Rate:** 88%

## Root Cause

The source file specified in target_sources() or add_executable() does not exist on disk at the given path.

## Version Compatibility

| Version | Status | Introduced | Deprecated |
|---------|--------|------------|------------|
| CMake 3.10 | active | — | — |
| CMake 3.16 | active | — | — |
| CMake 3.22 | active | — | — |
| CMake 3.27 | active | — | — |

## Workarounds

1. **Verify the file exists at the exact path specified. Use ${CMAKE_CURRENT_SOURCE_DIR} for relative paths to avoid ambiguity.** (90% success)
   ```
   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.** (85% success)
   ```
   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.** (70% success)
   ```
   Use file(GLOB ...) to automatically collect source files, but note this is discouraged for production builds due to missing dependency tracking.
   ```

## Dead Ends

- **Adding the file with a different extension like .cpp vs .cc or .cxx in the CMakeLists.txt** — 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. (90% fail)
- **Removing the target and re-adding without the missing file, assuming it's optional** — If the file is required for compilation, removing it will cause linker errors later. This only works if the file is genuinely unused. (75% fail)
- **Using an absolute path that includes the build directory instead of source directory** — 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. (85% fail)
