【问题标题】:How to add prebuilt library to project using cmake?如何使用 cmake 将预建库添加到项目中?
【发布时间】:2020-03-25 05:33:25
【问题描述】:

我已经查看了这里和互联网上的网站,甚至在 cmake.org 上 - 并没有找到这个,但想在这里发布它以防万一。

这是一个示例 cmakelists.txt 文件:

idf_component_register(SRCS "main.c"
                INCLUDE_DIRS ".")
  • 导入库,指定目标名称和库路径。
  • 还指定了库的私有依赖。

    add_prebuilt_library(预建“libprebuilt.a” PRIV_REQUIRES spi_flash app_update 日志)

  • main 调用库中的函数,因此将其链接到 main

    target_link_libraries(${COMPONENT_LIB} PRIVATE prebuilt)


这行得通。当然,PRIV_REQUIRES 中需要是静态预建库使用的所有组件模块。

如需更多真实示例 - 请查看此处: https://github.com/espressif/esp-idf/tree/release/v4.0/examples/build_system/cmake/import_prebuilt

这要归功于 espressif 的人们——当我使用 cmake 编辑器时,即使自动完成功能也没有 找到 add_prebuilt...

希望有人觉得这很有帮助,因为我很快就掉进了这个 cmake 语法兔子洞。

问候, 约翰 W.

【问题讨论】:

  • 在 Stack Overflow 上,我们鼓励用户分享他们的知识,但这种分享仍应采用问答形式:问题帖 应说明问题(没有解决方案)需要帮助,答案帖应包含问题帖中所述问题的解决方案。目前,您的问题帖子您问什么(什么是问题)尚不清楚。另请注意,idf_component_register 不是 CMake 的基本功能,而是由 ESP-IDF 提供的。
  • 为了回应前面的评论,Stack Overflow 严格遵守问答格式。考虑使用该站点的tour。请考虑重新格式化您的帖子以匹配该格式(包括发布 answer 帖子)。但是,该问题已经在网站上被问过(多次),因此您也可以考虑发布答案herehere
  • 好的——我的错在这里——我认为 add_prebuilt_library 是 cmake 的标准配置——显然不是。这是 ESP32 IDF 特有的。

标签: cmake hyperlink static


【解决方案1】:

这是 ESP32 特有的东西 - 我认为 add_prebuilt_library 是我发现非常方便的 cmake 标准功能是我的错误。

这是来自 Espressif 的文字:

将预建库与组件一起使用

.. 高亮:: cmake

ESP-IDF 构建系统提供实用功能add_prebuilt_library 供用户轻松导入使用 预建库::

add_prebuilt_library(target_name lib_path [REQUIRES req1 req2 ...] [PRIV_REQUIRES req1 req2 ...])

地点:

  • target_name- 可用于引用导入库的名称,例如链接到其他目标时
  • lib_path- 预建库的路径;可以是组件目录的绝对或相对路径

可选参数REQUIRESPRIV_REQUIRES 指定对其他组件的依赖。这些与idf_component_register 的参数具有相同的含义。

请注意,预构建库必须已针对与使用项目相同的目标进行编译。与预建相关的配置 库也必须匹配。如果不注意,这两个因素可能会导致应用程序中出现细微的错误。

例如,请看 :example:build_system/cmake/import_prebuilt

====

对于由此造成的任何混乱,我们深表歉意。

如果您正在为新工具上的 ESP 平台进行开发,如果您像我一样在文档中错过了这一点,这可能会很方便。

问候, 约翰 W.

【讨论】:

    猜你喜欢
    • 2023-04-07
    • 1970-01-01
    • 2020-11-15
    • 2017-02-16
    • 1970-01-01
    • 1970-01-01
    • 2018-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多