如何删除一个cmake目标?

4
在我的CMake项目中,我遇到了以下错误:
“add_custom_target无法创建目标“卸载”,因为已经存在另一个同名目标。”
因此,我想要删除/删除已经存在的目标。我该怎么做?
问题在于,我不编写创建这两个目标的CMake代码。这两个不同的CMake脚本在执行我的自己的CMake脚本期间下载并执行,因此我对CMake脚本的这部分没有完全控制。

1个回答

1

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

在定义后的配置时间内无法删除目标,并且无论如何,在尝试使用非唯一目标名称时错误始终会发生在定义点上。

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

你还可以联系那些外部依赖项的上游维护者,礼貌地要求他们通过“命名空间”来缓解名称冲突,使其软件包更加适合像你这样的用例。参见How can I avoid target name collisions when using CMake FetchContent?

如果这些项目维护者拒绝了你的请求,你可以尝试在下载后修补他们的 CMake 文件来解决问题。如果你正在使用 ExternalProject 模块或基于 ExternalProjectFetchContent 模块,你可能可以通过 PATCH_COMMAND 参数(参见文档)实现这一点,该参数“指定一个自定义命令,在更新后修补源代码。”,或者使用 ExternalProject 来构建和安装,然后为外部项目中的已安装目标定义 导入库,从而允许你控制目标名称。

另外,如果你感到不耐烦,并想做一些开源贡献,你可以询问如何帮助Craig Scott 提出的 CMake 功能项目级别命名空间的 Kitware 问题票。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接