编译具有相同目标的不同子项目时出现 CMP0002 错误

2023-11-26

我有很多子文件夹

home
|
|-library1
|-library2
|
|-libraryn

每个子文件夹都包含一个可以自行编译的完整库(每个库都有不同的维护器)。到目前为止,它工作正常,并且我使用脚本编译它们。

现在我需要创建另一个库,它依赖于现有的库。为此,我创建了一个CMakeLists.txt在主文件夹下,使用add_subdirectory允许我编译所有库的命令。

我有类似的东西

cmake_minimum_required (VERSION 2.8)

add_subdirectory(library1)
add_subdirectory(library2)
...
add_subdirectory(libraryn)

当我尝试执行时cmake我收到各种库的以下错误:

CMake Error at libraryY/CMakeLists.txt:63 (add_custom_target):
  add_custom_target cannot create target "doc" because another target with
  the same name already exists.  The existing target is a custom target
  created in source directory
  "/path/to/libraryX".  See
  documentation for policy CMP0002 for more details.

发生这种情况是因为我们在每个库中创建了一个 doc 目标,以便编译库本身的 Doxygen 文档。当库被一一编译时,它工作得很好,但与主CMakeLists.txt看来我做不到。

# Create doc target for doxygen documentation compilation.
find_package (Doxygen)
if (DOXYGEN_FOUND)
  set (Doxygen_Dir ${CMAKE_BINARY_DIR}/export/${Library_Version}/doc)
  # Copy images folder
  file (GLOB IMAGES_SRC "images/*")
  file (COPY ${IMAGES_SRC} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/images)
  configure_file (${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY)
  add_custom_target (doc
    ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
    COMMENT "Generating doxygen documentation" VERBATIM
  )
else (DOXYGEN_FOUND)
  message (STATUS "Doxygen must be installed in order to compile doc")
endif (DOXYGEN_FOUND)

有没有办法一次性编译这些项目而不修改这个目标?


如果您不想修改任何内容,以便可以将所有这些项目构建为子项目,那么您可以使用外部项目_添加构建和安装依赖项。

option

或者你可以使用option排除命令doc构建目标:

# Foo/CMakeLists.txt
option(FOO_BUILD_DOCS "Build doc target for Foo project" OFF)
# ...
if(DOXYGEN_FOUND AND FOO_BUILD_DOCS)
  add_custom_target(doc ...)
endif()

# Boo/CMakeLists.txt
option(BOO_BUILD_DOCS "Build doc target for Boo project" OFF)
# ...
if(DOXYGEN_FOUND AND BOO_BUILD_DOCS)
  add_custom_target(doc ...)
endif()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编译具有相同目标的不同子项目时出现 CMP0002 错误 的相关文章

  • 使用 CMake 链接 .s 文件

    我有一个我想使用的 c 函数 但它是用Intel编译器而不是gnu C编译器 我在用着cmake构建程序 我实际上正在使用ROS因此rosmake但基础是cmake所以我认为这更多是一个 cmake 问题而不是ROS问题 假设使用构建的文件
  • Windows 中 CMake 的默认生成器是什么?

    在一台 PC 上运行 CMake 时 CMake 默认生成 NMake 文件 另一方面 它生成一个 Visual Studio 项目 我知道我可以通过添加来覆盖默认值 G NMake Makefiles 到我的 CMake 语句的末尾 但我
  • 如何使用Cmake使用框架?

    对于 Macos 我想链接到一些框架 在 Windows 中 我想链接到一些库 比如OpenGL Framework 如何使用cmake表达这个需求 您可以尝试以下代码 target link libraries
  • Qt 5 和 OS X Mavericks 问题

    我正在使用 Cmake 在 OS X 10 9 上构建 QT 项目 自 Mavericks 以来 OpenGL 标头的位置似乎发生了变化 文件夹 System Library Frameworks OpenGL framework Head
  • 如果构建是源代码外的,CMake 无法找出标头依赖项?

    我一直在使用 CMake 来管理一个单独的小型 c 项目 基于 Unix Makefile 并决定将其转换为更有组织的源代码外构建 但是 当它超出源时 通过执行cmake 在 build 中 我的标头不再是其源文件的依赖项 如果我只是从顶层
  • 使用 CMAKE (VISUAL STUDIO) 链接调试和发布库

    已经有一个Thread https stackoverflow com q 2209929 293195这并没有真正帮助 我希望能够链接例如Foo lib for Release配置和Foo d lib for Debug配置 我怎样才能实
  • CMake 错误“找不到要添加属性的目标”

    在我的 CMakeLIsts txt 文件中我这样写 set LIBHELLO SRC hello c set target properties hello static PROPERTIES OUTPUT NAME hello get
  • 单个 CMakeLists.txt 足以满足我的项目需求吗?

    我正在尝试将旧的 CMake 移植到现代 CMake CMake 3 0 2 或更高版本 在旧的设计中 我有多个 CMakelists txt 每个目录都包含一个 CMakeLists txt 文件 我当前项目的目录结构如下所示 VizSi
  • M1 MacBook Pro 和 cmake 的编译错误

    我刚刚拿到了新的 M1 MacBook Pro 正在尝试编译大学工作所需的代码库 以下是我已采取的步骤 我使用 Rosetta 将终端设置为始终打开 安装的自制程序using bin bash c curl fsSL https raw g
  • Jenkins + Cmake + JIRA = 多个相互依赖项目的 CI?

    我们的系统中有许多小项目在 Linux 上运行 Slackware 7 11 正在慢慢迁移到 RHEL 6 0 大约 50 100 个应用程序和 15 20 个库 我们几乎所有的应用程序都使用我们的一个或多个库 我们的源树看起来像这样 ap
  • Qt5 CMake 将所有库包含到可执行文件中

    我正在尝试使用 Qt 5 14 构建一个发布模式下的应用程序 并且 Qt Creator 内部一切正常 但是当我尝试单独运行可执行文件时 我收到如下错误 OS Windows 10 Qt 5 14 Cmake 3 5 我尝试过的 设置 CM
  • 如何以编程方式迭代所有 CMake 目标?

    有没有办法从顶层获取 CMake 项目的所有目标CMakeLists txt 即以编程方式迭代目标 我想要这样做的原因是将一些 XCode 特定设置应用于每个目标 if CMAKE GENERATOR MATCHES Xcode inclu
  • 将 cmake 与自定义文件生成器结合使用

    我想使用 CMake 生成混淆的 lua 文件以供交付 在我的一生中 我无法让 add custom command add custom target 为我构建这些文件 我缺少一些东西 ADD CUSTOM TARGET LUABIND
  • 如何在cmake中添加cuda源代码的定义

    我使用的是 Visual Studio 2013 Windows 10 CMake 3 5 1 一切都可以使用标准 C 正确编译 例如 CMakeLists txt project Test add definitions D WINDOW
  • 如何将脚本的依赖项添加到 CMake 中的目标?

    链接我的程序后 我需要对其执行一些后处理 我添加了一个add custom command TARGET 效果很好 但是 这个额外的自定义命令运行一个脚本 未生成 它已签入代码库 并且我希望如果该脚本发生更改 目标将被视为过时 以便正确重建
  • 构建涉及 cmake 的项目,如何使其了解库

    当我尝试在 64 位 linux debian 机器上使用 cmake 和 gcc 构建此项目时 我从链接器中收到错误 Linking C executable cpsadamsx home dala lib64 libSimTKcommo
  • 使用 cmake 将两种解决方案合二为一

    我有两个单独的 Visual Studio 2013 解决方案 我想将它们迁移到一个解决方案中 因为第一个解决方案 使用 Qt 充当第二个解决方案的 GUI 最后 我希望有一个结构如下的单一解决方案 Solution All Build P
  • cmake:设置多个项目以及它们之间的依赖关系

    我需要帮助为 C 项目编写一个好的 CMakeLists txt 我寻找答案 但我发现了什么 这是我的项目结构 MainProj ProjLib include proj lib h src proj lib cc CMakeLists t
  • target_link_libraries 和 INCLUDE_DIRECTORIES 属性

    在这个片段中 cmake minimum required VERSION 3 0 project hello LANGUAGES C VERSION 0 0 1 add library a INTERFACE target include
  • 如何在使用cmake完成make后打印消息?

    我正在尝试使用 CMake 完成构建过程后打印消息 我只是想在之后通知用户make命令已完成 没有任何错误 我该怎么做 我试过add custom target 但我无法选择何时跑步 另外 我尝试过add custom command 它再

随机推荐

  • Key Vault 返回 401 和访问令牌(MSI PowerShell Function App)

    我正在尝试连接到Keyvault和我的Azure 函数 using 电源外壳 托管服务身份 MSI 已打开 并且在 Keyvault 中我授予了 MSI 获取 和 列表 访问策略 使用下面的脚本我成功获得了访问令牌 但是当我向 Keyvau
  • 我应该使用 CakePHP 2 还是 3 进行开发 [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我刚刚开始使用 CakePHP 开发一个软件即服务项目 我可以看到版本 3 仍处于测试阶段 并且我可以看到该项目需要 3 6 个月的时间 我的问题是我应该从版本 2 还是版本 3 beta
  • 如何将具有相同名称和模式但不同目录的文本文件导入数据库?

    我需要将多个具有相同名称和相同架构的txt文件导入到SQL Server 2008数据库中的同一个表中 我遇到的问题是它们都位于不同的目录中 TEST 201304 sample1 txt sample2 txt 201305 sample
  • RecyclerView - 网格布局管理器列的动画更改

    我想要动画化我的变化RecyclerViews GridLayoutManager 我默认在包含 3 列的网格中显示项目列表 用户可以选择显示更多或更少的列 我想要views in the RecyclerView移动 扩展到他们的新职位
  • 在 Spring Boot 和 Angular 应用程序的 Tomcat 上部署 WAR 文件

    我创建了一个 Angular 和 Spring Boot 应用程序 我想将其部署在 Tomcat 服务器上 为此 我在 Spring Boot 项目中复制了一个 Angular 项目 并提供了pom xml创建 WAR 文件 之后我将 WA
  • Android 中 SVG 和 VectorDrawable 的区别

    虽然Android支持SVG 但为什么要转换为VectorDrawable 此代码示例显示 Android 中的 SVG SVG svg SVGParser getSVGFromResource getResources R raw and
  • 在 Rest API 中使用 Facebook 维护 Express 和 NodeJS 中 JWT 的密钥和访问令牌

    我有两个应用程序 server REST API Server node js Express jsonwebtokens 快递 jwt mongoose client Portable Front end 引导程序 角JS 本地存储 角度
  • 使用 webpack 将 jQuery 包含在 Angular2 中并从组件访问它

    我想将 jQuery 和 SignalR 包含在我的 Angular2 应用程序中 并使用 webpack 连接所有内容 因此我通过 npm 安装了 jQuery 包 json dependencies jquery 2 1 4 文件和文件
  • Ubuntu 上的 Java 安装问题

    尝试在我的新 Ubuntu 系统上安装 Java JDK 6 并遇到一些奇怪的错误 这是我第一次使用anyLinux 的风格 所以我确信这是一个用户问题 权限或其他 我直接从 Oracle 网站下载了 BIN 文件 适用于 64 位 Lin
  • 使用 Facebook API 获取封面照片

    在我的 Android 应用程序中 我试图从用户的 Facebook 帐户获取他的封面照片 我可以使用下面的代码获取个人资料图片 profilePicUrl new URL http graph facebook com userId pi
  • python - 从自身内部调用函数

    我已经拥有的代码用于接收数学表达式并计算它的机器人 现在我让它做乘法 除法 减法和加法 但问题是我想建立对括号和括号内括号的支持 为此 我需要首先针对括号内的表达式运行我为不带括号的表达式编写的代码 我本来打算检查一下 并将其中的表达式附加
  • 什么是方法、属性和函数?

    是的 我正在为此苦苦挣扎 我无法区分它们 因为我读到的每一个解释都是如此不清楚且足够哲学 有人可以帮我澄清这些定义吗 多谢你们 这些定义与 oop 一样适用于过程编程 谢谢 随着时间的推移 人们使用这些术语的方式已经发生了变化 并且可能会不
  • 使用 icomoon 从 svg Figma 图标生成字体时自动填充颜色

    我想将 svg 转换为图标字体我的 HTML CSS 中的元素使用爱可梦应用程序
  • MySQL 中的存储过程与触发器

    在 MySQL 世界中 存储过程与触发器有何不同 存储过程存储为预编译代码 存储例程 并由程序员在想要触发的任何地方调用 存储过程可以返回值 关于程序和功能 触发器是在发生插入 删除 更新 或其他事件 时自动触发的命名数据库对象 不能显式调
  • bash 在循环中分配给数组索引时遇到问题

    我可以让它在 ksh 中工作 但不能在 bash 中工作 这真的让我发疯 希望这是我忽略的显而易见的事情 我需要运行一个外部命令 其中输出的每一行都将存储在数组索引中 这个简化的示例看起来像是在循环中正确设置了数组 但是在循环完成后 这些数
  • 如何将 Json 字符串转换为 NSArray? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我目前正在尝试将一些对象的 JSON 表示形式转换为NSArray 我用了Res
  • 新的 cassandra 节点无法使用种子进行八卦

    我正在尝试使用 cassandra 2 0 7 启动一个新节点 两个节点均位于 Digital Ocean 种子节点已启动并正在运行 我可以从我尝试启动的节点远程登录到该主机上的端口 7000 root cassandra02 apache
  • pydev 调试器:在 OS 10.8 升级后无法找到 python 2.7 的真实位置

    我刚刚升级到 OS X 10 8 Mountain Lion 但无法理解 pydev 调试器如何在 Aptana 3 0 上工作 在 Aptana 的首选项中 我将 python 解释器设置为 usr bin python 它指出系统库来自
  • Object.GetType() 可以返回 null 吗?

    只是好奇 有什么时间打电话吗 GetType 对象上会返回 null 假设用途 public Type MyMethod object myObject return myObject GetType 对象上的 GetType 永远不会返回
  • 编译具有相同目标的不同子项目时出现 CMP0002 错误

    我有很多子文件夹 home library1 library2 libraryn 每个子文件夹都包含一个可以自行编译的完整库 每个库都有不同的维护器 到目前为止 它工作正常 并且我使用脚本编译它们 现在我需要创建另一个库 它依赖于现有的库