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

Nik*_*tha 4 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 :::::.
Run Code Online (Sandbox Code Playgroud)

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

sky*_*ack 6

根据CMake政策CMP0002(由CMake 2.6引入,强调我的):

使用 add_executable,add_library或add_custom_target创建的目标名称是逻辑构建目标名称.逻辑目标名称必须全局唯一 [...]

以下注释值得一提,无论如何都可能对您有所帮助:

自定义目标必须只具有全局唯一名称(除非将全局属性ALLOW_DUPLICATE_CUSTOM_TARGETS与Makefile生成器一起使用).

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

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

为了能够使用重复的自定义目标,请将以下行放入CMakeLists.txt:

set(ALLOW_DUPLICATE_CUSTOM_TARGETS TRUE)
Run Code Online (Sandbox Code Playgroud)

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


小智 6

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

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

https://cmake.org/cmake/help/v3.0/command/set_target_properties.html