乐鑫技术交流
直播中

任凭风吹

10年用户 1069经验值
擅长:可编程逻辑 电源/新能源 MEMS/传感技术 制造/封装 模拟技术
私信 关注
[问答]

如何在PRIV_REQUIRES中通过绝对路径添加组件?

我有一个结构如下的项目:
代码:
- my_project/
             - CMakeLists.txt
             - components/
                      - foo/
                              - CMakeLists.txt
                        - foo.c
我希望 foo 子组件通过绝对路径要求(通过 PRIV_REQUIRES)一个组件,即我不想通过 EXTRA_COMPONENT_DIRS 在项目级别添加 foo 所需组件的路径。
用例:
例如,我想包含 esp-idf 示例中的 protocols_examples_common 组件:
有效的解决方案(我想避免)是:
project/CMakeLists.txt:
代码:
cmake_minimum_required(VERSION 3.16)
set(EXTRA_COMPONENT_DIRS   "$ENV{IDF_PATH}/examples/common_components/protocol_examples_common"
)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(my_project)
foo/CMakeLists.txt:
代码:
idf_component_register(
    SRCS "foo.c"
    INCLUDE_DIRS "."
    PRIV_REQUIRES protocol_examples_common
)
上面的配置将正确构建,因为 foo 组件可以找到 protocol_examples_common。
然而,我想做的不是将 protocol_examples_common 的路径添加到 EXTRA_COMPONENT_DIRS,并为 foo/CMakeLists.txt 中的组件指定一个绝对路径,例如:
project/CMakeLists.txt:
代码:
cmake_minimum_required(VERSION 3.16)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(my_project)
foo/CMakeLists.txt:
代码:
idf_component_register(
    SRCS "foo.c"
    INCLUDE_DIRS "."
    PRIV_REQUIRES
            "$ENV{IDF_PATH}/examples/common_components/protocol_examples_common"
)
但是使用上面的配置会导致 cmake 报错:
代码:
Failed to resolve component
  '/Users/brian/.espressif/esp-idf/examples/common_components/protocol_examples_common'.
有没有办法编写 foo/CMakeLists.txt 以便它可以指示它需要 protocol_examples_common 而不必更新项目的 CMakeLists.txt 中的 EXTRA_COMPONENT_DIRS?

更多回帖

发帖
×
20
完善资料,
赚取积分