CMake报错add_library无法创建Plugin重复目标该如何解决?
报错含义
add_library cannot create target "Plugin" because another target with the same name already exists.
这个报错是CMake内置政策CMP0002的约束结果:CMake构建系统内的所有目标(包括库、可执行文件等)必须全局唯一,不允许重名。
报错信息已经明确给出冲突来源:路径D:/CHAI3D/SOFA/src/applications/plugins/plugin下已经创建过一个名为Plugin的共享库目标,你当前的CMakeLists.txt里又通过add_library(${PROJECT_NAME} SHARED ...)尝试创建同名目标,因此触发冲突。
你之前配置的set(ALLOW_DUPLICATE_CUSTOM_TARGETS TRUE)不生效的原因是:这个变量仅对add_custom_target创建的自定义目标生效,你当前冲突的是add_library创建的普通库目标,该变量对这类目标没有约束作用。
解决方案
按优先级从高到低可选以下方案:
- 重命名你的项目:将
project(Plugin VERSION 21.06.99)中的项目名替换为独有的名称,比如project(MySofaPlugin VERSION 21.06.99)。后续所有调用${PROJECT_NAME}的代码会自动同步新名称,不需要额外修改其他逻辑,是成本最低、兼容性最好的方案。 - 删除重复引入的目标:检查你当前工程的父级CMake配置,确认是否同时引入了SOFA自带的
D:/CHAI3D/SOFA/src/applications/plugins/plugin目录和你自己的插件目录,删除其中一个的add_subdirectory配置即可解决冲突。 - 给目标加命名空间:如果必须保留
Plugin作为项目名,可以修改库目标的创建逻辑,给目标加上专属命名空间,比如add_library(myvendor::${PROJECT_NAME} SHARED ${HEADER_FILES} ${SOURCE_FILES} ${RESOURCE_FILES}),这种方案需要同步修改所有链接该库的配置,改造成本相对更高。
内容的提问来源于stack exchange,提问作者B_M
相关产品推荐
相关产品推荐

