编译具有相同目标的不同子项目时出现 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 中的子目录生成“干净”目标

    我想生成一个clean子目录的目标 我的项目结构是这样的 app A B lib A B C 有时我只想在 app A 上运行干净 并且不想清理库 是否可以告诉 CMake 生成clean每个目录的目标 或者像这样的自定义目标应用程序清理哪
  • cmake 找不到 Qt4

    由于4 8 0已经发布 我重新安装了Qt 现在我也想使用cmake 为了使 cmake 工作 我记得必须添加 mingw bin 文件夹 QtSDK Desktop Qt 4 7 3 到Qt4 7 3中的PATH 所以我猜测在中会有一个类似
  • 如何使我的单元测试适应 cmake 和 ctest?

    到目前为止 我已经使用了一个临时的单元测试程序 基本上是由批处理文件自动运行的全部单元测试程序 尽管其中很多都明确地检查了他们的结果 但还有更多的作弊行为 他们将结果转储到版本控制的文本文件中 测试结果中的任何更改都会被颠覆标记 我可以轻松
  • 使用 CMake 时如何导出 Emscripten 中的 C 函数

    In 本教程 https emscripten org docs porting connecting cpp and javascript Interacting with code html interacting with code
  • 使用 CMake 对 SDL 的未定义引用

    我正在使用 SDL v1 2 15 7 和 CMake 3 2 1 开发一个项目 在 h 文件中我添加了 include
  • 为什么 cmake 在 git commit 后编译所有内容

    假设我有时在 Linux 上使用 cmake 2 8 编译一段代码 我更改了一个文件 my changed file 运行 cmake 并且只构建了这个文件 到目前为止 一切都很好 现在我想提交这个 git add my changed f
  • CMake“无法运行 MSBUILD.exe”命令错误

    当我想为 opencv 3 3 0 创建 Visual Studio 15 2017 make 文件时 它给了我以下错误消息 error in configuration process project files maybe invali
  • 如何将最新的 Windows SDK 版本传递给 CMake?

    如何将最新的 Windows SDK 版本传递给 CMake 这样我就不需要进入 Visual Studio 并从配置属性 常规中手动放置它 我在互联网上搜索 找到了 CMAKE SYSTEM VERSION 变量 并且尝试使用 set C
  • CMake:使用其他平台的生成器。如何?

    如何使用 CMake 在 Linux 上生成 Visual Studio 项目文件 你不能 您必须在 Windows 上运行 CMake 才能为 Visual Studio 生成
  • CMake:从多行文本文件获取版本

    我有一个文件version txt VERSION MAJOR 1 VERSION MINOR 1 VERSION PATCH 3 我想使用 cmake 添加主要 次要和补丁的定义 我尝试过使用 file STRING version tx
  • 如何告诉 CMake 将构建文件放在哪里?

    我想告诉 CMake 将文件和文件夹输出到不同的文件夹而不是当前文件夹 我在下面讨论的是 CMake 生成的文件 文件 CMakeCache txt 目录 CMakeFiles 文件 生成文件 目录 bin 文件 cmake install
  • Cmake选项默认值

    如果我有一个 CMakeLists txt 文件 cmake minimum required VERSION 2 8 OPTION FOO Foo Option OFF MESSAGE FOO FOO 然后我调用 cmake 得到以下输出
  • VS 2010 和 CMake:“rc”未被识别为内部或外部命令

    我正在尝试使用 VS 2010 和 CMake 在 Windows 10 Home 上构建一个项目 我收到以下错误 zutil c lib nologo out zlib lib adler32 obj compress obj crc32
  • CMake 错误:“add_subdirectory 未给出二进制目录”

    我正在尝试将 Google Test 集成到更大项目的子项目中 但找不到令我满意的解决方案 我有两个限制 Google Test 的源代码已经位于项目结构中的某个位置 因此不能使用 URL 从 git 存储库下载它 Google Test
  • 将 cmake 与 nmake x64 一起使用

    我使用 cmake 生成 NMake 文件 一切正常 我使用 x64 工具集 没有 Visual Studio 只有 SDK 因此我输入 nmake 但它生成 x86 构建而不是 x64 构建 你知道为什么吗 以及如何强制 nmake 以
  • 使用 CMake 编译时更改头文件位置会导致缺少 vtable 错误

    对于一个大型 C 项目 我需要从 qmake 过渡到 CMake 但是在处理一个玩具示例时 我遇到了一些我不理解的行为 示例代码具有单个头文件 当该头文件移动到子目录中时 我收到 MainWindow 类缺少 vtable 的错误 CMak
  • CMake第三方库安装

    我是编程新手 对于我的研究项目 我需要安装一个第三方库以便与 CMake 一起使用 GitHub项目 https github com cpp io2d P0267 RefImpl blob master BUILDING md 我在我的电
  • CMake:Fortran 模块和编译顺序

    我有一个大型 Fortran 程序 其中包含许多目录 每个目录都在伪库中单独编译 但仍然存在相互依赖的混乱 因此最终所有伪库都组合在一个可用的库中 我想使用 Fortran 模块 但它非常脆弱 因为我不能依赖自动依赖项检查 并且根据顺序编译
  • 如何配置 cmake 在修改非 .cpp 源文件时重新编译目标

    如果我们看下面的最小示例 cmake minimum required VERSION 3 20 project example add executable PROJECT NAME main cpp test txt 一旦可执行目标被构
  • 如何在cmake中静态链接到glibc

    我正在尝试从 Fedora 构建一个可以在 RedHat 6 机器上运行的包 所以我需要构建和静态链接一些RedHat机器中不存在的库 我发现我可以你 static libgcc or static libstdc 与标准库的静态版本链接

随机推荐

  • 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 每个子文件夹都包含一个可以自行编译的完整库 每个库都有不同的维护器 到目前为止 它工作正常 并且我使用脚本编译它们 现在我需要创建另一个库 它依赖于现有的库