我有一个结构如下的项目:
代码:
- 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?