在CMake中,如何创建具有相同名称的目标?

在CMake中,如何创建具有相同名称的目标?,cmake,Cmake,我有一个关于CMake的问题,我需要帮助解决以下错误: CMake Error at :::: (add_custom_target): add_custom_target cannot create target "generate" because another target with the same name already exists. The existing target is a custom target created in source directory

我有一个关于CMake的问题,我需要帮助解决以下错误:

CMake Error at :::: (add_custom_target):
  add_custom_target cannot create target "generate" because another target
  with the same name already exists.  The existing target is a custom target
  created in source directory :::::.

这里,两个相同级别的
CMakeLists.txt
的目标名称是相同的,我希望它们保持相同,没有任何冲突。有人能帮我吗?

根据CMake政策(由CMake 2.6引入,重点是我的):

使用添加可执行文件、添加库或添加自定义目标创建的目标名称是逻辑构建目标名称。逻辑目标名称必须是全局唯一的[…]

下面的注释值得一提,可能会对您有所帮助:

自定义目标必须具有全局唯一的名称(除非使用全局属性
ALLOW\u DUPLICATE\u Custom\u targets
和Makefiles生成器)

这意味着存在一个名为的全局属性,它可能就是您要查找的。它的用途有限,您应该仔细阅读文档,但值得一试。
最相关的部分如下:

Makefile生成器能够支持重复的自定义目标名称。[…]但是,设置此属性将导致非Makefile生成器产生错误并拒绝生成项目

要能够使用重复的自定义目标,请在
CMakeLists.txt
中输入以下行:

set(ALLOW_DUPLICATE_CUSTOM_TARGETS TRUE)

如果它能解决您的问题,主要取决于实际问题,所以我不能说。

这可能是一个很好的帮助:

OUTPUT_NAME在生成目标时设置目标的真实名称,可用于帮助创建两个同名目标,即使CMake需要唯一的逻辑目标名称


我认为这是不可能的。据我所知,目标名称必须是唯一的。否则,可以使用类似于
cmake--build的命令--目标生成
无法知道要生成的两个自定义目标中的哪一个。如果生成目标属于二进制目标,可以将其命名为generate\u binaryTarget。如果要将某个对象分组到同一个
make
目标下,还可以使用关键字
APPEND
add\u custom\u command()
。请给出您的CMake代码的一个示例,以便我们提出解决方案?添加_custom_target(cleanall${}命令${}WORKING_目录${})这就是我正在做的-此命令cleanall存在于两个CMAKEL列表中,并且在生成时存在冲突。因为它无法理解调用哪个ethanks@skypjack。我要试一试。。感谢您的帮助:)这不适用于2.6版。是否需要添加其他内容??由CMake 2.6引入-可能您在
CMakeLists.tx
中的其他地方做错了什么,但它应该从2.6版开始工作。它正在工作,我在语法上有一个错误。谢谢你的帮助。:)@尼基莎,不客气。我很高兴它能按预期工作。如果答案能解决问题,不要忘记接受它。它将帮助未来的读者。这有什么帮助?CMake要求目标名称在生成生成文件之前是唯一的。我们可以让名为
foo1
foo2
的目标在输出生成文件(或其他构建系统)中生成目标
foo
,但反之亦然。