cmake build_error ai_generated true

CMake 错误:add_library 无法创建目标 "mylib",因为已存在同名目标。

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

ID: cmake/target-already-exists

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

版本兼容性

版本状态引入弃用备注
cmake 3.22 active
cmake 3.28 active
cmake 3.30 active

根因分析

在同一目录范围内重复定义了同名目标,通常是由于重复的 add_library 或 add_executable 调用,或子目录中目标名称拼写错误。

English

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.

generic

官方文档

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

解决方案

  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.
  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()

无效尝试

常见但无效的做法:

  1. 60% 失败

    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.

  2. 90% 失败

    The error is in CMakeLists.txt logic, not cached state; clearing cache does not fix duplicate target definitions.

  3. 100% 失败

    target_compile_definitions does not create or rename targets; it only adds compile definitions to existing targets.