链接到 CMAKE 中的ExternalProject_add 依赖项

2024-03-19

我在运行 Ninja 时收到以下 ninja 构建错误。我的 CMAKE 构建命令是cmake -G"Ninja" -DCMAKE_BUILD_TYPE=Release.

ninja: error: 'ext_deps/api/src/ext_api/build/src/lib/libapi.a', needed by 'Project', missing and no known rule to make it

假设我的项目由一个 API(通过 CMAKE 从 GitHub 下载)和实现(项目)组成。

The layout would look like:
Project/
-- build/
-- cmake/modules
----- ExternalDep.cmake
----- FindAPI.cmake
-- CMakeLists.txt
-- src/
---- CMakeLists.txt
-- include/

假设在顶层CMakeLists.txt我执行设置构建设置、CXX 标志等的常规业务,然后调用include(ExternalDep),它检查“API”库是否在用户的系统中(如果没有,则通过 CMAKE 下载)。 在src/CMakeLists.txt我尝试使用 API 库链接

target_link_libraries(${PROJECT_NAME} PRIVATE ${API_LIBRARY})

我遇到的第一个问题是,在下载和构建“API”库之前,我收到了上面发布的忍者构建错误。我很肯定ExternalDep.cmake在我尝试添加项目可执行文件并链接到“API”库之前包含在内。

这是一个简化版本ExternalDep.cmake:

  set(EXT_DEPS_PREFIX "ext_deps")

  ExternalProject_Add(ext_lib
    GIT_REPOSITORY "https://github.com/fake/api.git"
    GIT_TAG "master"
    PREFIX "${CMAKE_BINARY_DIR}/${EXT_DEPS_PREFIX}/api"
    TMP_DIR "${CMAKE_BINARY_DIR}/${EXT_DEPS_PREFIX}/api-tmp"
    STAMP_DIR "${CMAKE_BINARY_DIR}/${EXT_DEPS_PREFIX}/api-stamp"
    CMAKE_ARGS -DCMAKE_BUILD_TYPE=Release
    SOURCE_DIR "${CMAKE_BINARY_DIR}/${EXT_DEPS_PREFIX}/api/ext_api"
    BINARY_DIR "${CMAKE_BINARY_DIR}/${EXT_DEPS_PREFIX}/api/ext_api-build"
    BUILD_ALWAYS true
    TEST_COMMAND "")

  add_dependencies(ext_projects ext_api)

  set(API_LIBRARY "${CMAKE_BINARY_DIR}/${EXT_DEPS_PREFIX}/api/ext_api-build/src/lib/libapi.a")

我遇到了同样的问题Ninja虽然它工作得很好Unix Makefiles,我设法让它与Ninja通过添加一个BUILD_BYPRODUCTS线路到我的ExternalProject_Add堵塞。例子:

    ExternalProject_Add(SDL2_PROJECT
        PREFIX 3rdparty
        URL https://www.libsdl.org/release/SDL2-2.0.5.tar.gz
        URL_MD5 d4055424d556b4a908aa76fad63abd3c
        CONFIGURE_COMMAND <SOURCE_DIR>/configure ${SDL2_configure_args} --prefix=<INSTALL_DIR> --disable-shared
        INSTALL_COMMAND make install -j9
        BUILD_BYPRODUCTS <INSTALL_DIR>/lib/libSDL2.a
    )
    ExternalProject_Get_Property(SDL2_PROJECT INSTALL_DIR)
    set(SDL2_INSTALL_DIR ${INSTALL_DIR})
    add_library(SDL2_LIBRARY STATIC IMPORTED GLOBAL)
    set_property(TARGET SDL2_LIBRARY PROPERTY IMPORTED_LOCATION ${SDL2_INSTALL_DIR}/lib/libSDL2.a)
    add_dependencies(SDL2_LIBRARY SDL2_PROJECT)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

链接到 CMAKE 中的ExternalProject_add 依赖项 的相关文章

随机推荐

  • 如何在提交后的钩子脚本中获取项目路径?(git)

    我想调用位于存储库中的脚本 我当然可以执行以下操作 bin sh myscript sh 但我认为这不太好 那么如何在提交后脚本中获取项目的路径呢 When you re dealing with a non bare repository
  • 动态对话框——bash 中的菜单框

    我正在寻找有关在 bash 中制作动态对话框菜单框的良好解释 我正在尝试从具有如下结构的文件加载用户列表 user rw412 0 2 rx511 23 1 sgo23 9 2 fs352 1 4 another user rw412 0
  • 阿帕奇“找不到文件。”而不是 404. 错误文档

    我想设置自定义 404 错误文档 但我遇到了问题 首先 我的 htaccess 中有两个 RewriteRules RewriteRule 2 3 php lang 1 L RewriteRule 2 3 4 php lang 1 L 所以
  • 在新的 Android Studio 项目上获取“错误:无法在 null 对象上获取属性 ':lib'”

    我已经使用 Android Studio 创建了一个新项目 并在其中添加了新的 lib 项目 但现在我得到了 Error Cannot get property lib on null object 显然我设法通过添加逗号来解决它setti
  • Java 中 10,000 以内且 3、5 或 7 的倍数的数字之和

    我知道如何让程序将 3 5 和 7 中每一个的倍数总和相加 但我不确定如何让程序只使用每个数字一次 例如 我可以让程序找出所有数字并将它们相加为 3 然后对 5 执行相同操作 但数字 15 将出现在最终数字中两次 我不确定如何让它只接受一次
  • Spring 验证异常:BindException

    提交表格至addUser控制器发生异常 严重 Servlet DispatcherServlet 的 Servlet service 抛出异常 org springframework validation BindException org
  • 在 yq 中传递 bash 变量

    我正在尝试在 yq 中传递 bash 变量 test yml configuration Properties corporate url https stackoverflow com temp configuration Propert
  • beforeunload 中的 ajax 会可靠执行吗?

    我有一个 HTML5 应用程序 需要在用户更改 刷新页面时发送断开连接 ajax 请求 我目前正在使用这段代码 window addEventListener beforeunload function event ajax url api
  • 如何在asp.net core应用程序中运行ssis包?

    我已经使用 Microsoft SqlServer Dts Runtime 在 ASP NET MVC 中运行包 但是我需要在 asp net core 中运行它 由于我们无法在 ASP NET Core 中添加单独的 DLL 我想知道是否
  • Android 应用程序复制保护和数据文件

    在我的应用程序中 我在代码中的以下硬编码位置访问我的 sqlite 数据库 数据 数据 com mydomain appname databases database db 如果我在 Market Place 中打开复制保护 我的应用程序仍
  • Telegram 机器人:如何隐藏内联键盘? PHP

    我制作了一个带有内联键盘的电报机器人 来自InlineKeyboardMarkup 我喜欢hide 或使其one time 用户响应后的键盘 我怎样才能在 PHP 中做到这一点 这是我的机器人的视图 有方法editMessageReplyM
  • 在 Backbone.js 中使用状态并登录用户

    我需要检查用户是否已登录并经过身份验证 然后才能让我的用户使用我的backbone js基于应用程序 用户身份验证作为属性存储在本机主干模型中 我在启动主路由器之前通过调用进行检查Backbone history start 这样 未经身份
  • 使用 React 内联样式设置背景图像

    我正在尝试访问静态图像以在内联中使用backgroundImageReact 中的属性 不幸的是 我对如何做到这一点已经一无所知 一般来说 我认为你只是做了如下操作 import Background from images backgro
  • 扩展方法中的 ArgumentNullException 或 NullReferenceException?

    在空实例上调用扩展方法 扩展方法不允许 时 您认为抛出的最佳异常类型是什么 由于扩展方法只不过是静态方法 您可能会认为它应该是 ArgumentNullException 但另一方面 它们的使用方式与实例方法类似 因此使用 NullRefe
  • 检测主线程之外的 UI 操作

    注 此问题涉及从后台线程调用 UIKit 时发出警告 https stackoverflow com questions 10976424 warn on calls to uikit from background threads但没有给
  • 如何将进度条连接到函数?

    我正在尝试将进度条连接到我的项目的函数 这是我到目前为止所拥有的 但我很确定它什么也没做 def main pgBar start function1 function2 function3 function4 pgBar stop 这是我
  • Postgresql - 在大数据库中使用数组的性能

    假设我们有一个包含 600 万条记录的表 有 16 个整数列和少量文本列 它是只读表 因此每个整数列都有一个索引 每条记录大约 50 60 字节 表名称为 项目 服务器为 12 GB RAM 1 5 TB SATA 4 核 所有 postg
  • 如何在[关闭]下实现带点的画廊滑动

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如何实现画廊下点滑动 我需要显示当前
  • HTML 内容提取的最新技术水平如何?

    有很多关于 HTML 内容提取的学术工作 例如 Gupta Kaiser 2005 从可访问的网页中提取内容 http citeseerx ist psu edu viewdoc summary doi 10 1 1 60 357 以及这里
  • 链接到 CMAKE 中的ExternalProject_add 依赖项

    我在运行 Ninja 时收到以下 ninja 构建错误 我的 CMAKE 构建命令是cmake G Ninja DCMAKE BUILD TYPE Release ninja error ext deps api src ext api b