# CMake Error: add_library cannot create target "mylib" because another target with the same name already exists.

- **ID:** `cmake/target-already-exists`
- **Domain:** cmake
- **Category:** build_error
- **Verification:** ai_generated
- **Fix Rate:** 85%

## Root Cause

A target with the same name is defined twice in the same directory scope, typically due to duplicate add_library or add_executable calls, or a misspelled target name in a subdirectory.

## Version Compatibility

| Version | Status | Introduced | Deprecated |
|---------|--------|------------|------------|
| cmake 3.22 | active | — | — |
| cmake 3.28 | active | — | — |
| cmake 3.30 | active | — | — |

## Workarounds

1. **Ensure each target has a unique name across all subdirectories. Use `add_library(mylib STATIC src/mylib.cpp)` only once. If needed, use `set_target_properties` to alias or create an INTERFACE library with a different name.** (85% success)
   ```
   Ensure each target has a unique name across all subdirectories. Use `add_library(mylib STATIC src/mylib.cpp)` only once. If needed, use `set_target_properties` to alias or create an INTERFACE library with a different name.
   ```
2. **If the duplicate is intentional (e.g., from FetchContent), wrap in `if(NOT TARGET mylib)` before definition:
if(NOT TARGET mylib)
  add_library(mylib STATIC src/mylib.cpp)
endif()** (95% success)
   ```
   If the duplicate is intentional (e.g., from FetchContent), wrap in `if(NOT TARGET mylib)` before definition:
if(NOT TARGET mylib)
  add_library(mylib STATIC src/mylib.cpp)
endif()
   ```

## Dead Ends

- **** — The real cause is a duplicate definition; renaming may hide the issue but the original duplicate remains, causing other targets to reference the wrong one. (60% fail)
- **** — The error is in CMakeLists.txt logic, not cached state; clearing cache does not fix duplicate target definitions. (90% fail)
- **** — target_compile_definitions does not create or rename targets; it only adds compile definitions to existing targets. (100% fail)
