How to remove/delete a cmake target?

问题描述 投票:0回答:1

在我的 CMake 项目中,出现以下错误:

“add_custom_target 无法创建目标“卸载”,因为另一个 同名目标已存在。”

因此我想删除/删除已经存在的目标。 我该怎么做?

问题是,我没有编写创建这两个目标的 CMake 代码。这两个不同的 CMake 脚本是在我自己的 CMake 脚本执行期间下载和执行的,因此我无法完全控制 CMake 脚本的那部分。

c++ cmake target
1个回答
1
投票

正如您所说,由于这两个目标是由不属于您自己的项目(外部依赖项)定义的,因此您对它们没有太多控制权。

无法在定义点之后的配置时删除目标,无论如何,当尝试使用非唯一目标名称时,错误总是会在定义点发生。

其他人在这里遇到了类似的问题:Isolating gitsubmodule projects in CMake,并在评论中指出他们能够使用 Hunter 包管理器解决他们的问题,所以也许您可以尝试一下。

您还可以联系那些外部依赖项的上游维护者,并礼貌地要求他们通过“命名空间”他们的目标名称来减轻名称冲突,从而使他们的包对像您这样的用例更友好。另请参阅使用 CMake FetchContent 时如何避免目标名称冲突?.

如果那些项目维护者拒绝,您可以尝试通过在下载后修补他们的 CMake 文件来解决问题。如果您正在使用

ExternalProject
模块或
FetchContent
模块(构建在 ExternalProject 之上),您可以使用
PATCH_COMMAND
参数(参见 文档)来执行此操作,其中“指定自定义命令以在更新后修补源。”,或使用 ExternalProject 来构建和安装,然后从外部项目为已安装的目标定义导入的库,这将允许您控制目标名称。

或者,如果您感到不耐烦并且喜欢做一些开源贡献,您可以询问如何帮助解决Craig Scott 提出的 CMake 项目级命名空间功能的 Kitware 问题单

© www.soinside.com 2019 - 2024. All rights reserved.