某些头文件只能从主文件中包含吗?
Can certain header files only be included from main file?
我正在使用 ESP-IDF 为 ESP32 开发一个项目。我试图在组件中使用蓝牙库,但编译器抱怨头文件不存在。包含来自 main.c 的相同头文件没有任何问题。我要包含的头文件是:
#include "esp_bt.h"
#include "esp_bt_main.h"
#include "esp_gatts_api.h"
#include "esp_gap_ble_api.h"
#include "esp_gatt_common_api.h"
为什么某些头文件只能从 main.c 中包含?是否有任何解决方案或是否必须在 main.c 文件中添加某些功能来安抚 ESP-IDF?
注意:我在尝试使用 HTTPS 服务器时遇到包含头文件的相同问题。
如果有任何相关性,这是我正在使用的项目结构:
- CMakeLists.txt
- Makefile
- sdkconfig
- main
- CMakeLists.txt
- component.mk
- main.c
- components
- component1
- component1.h
- component1.c
- CMakeLists.txt
CMakeLists.txt 个文件完全相同:
idf_component_register(SRCS "ble.c" INCLUDE_DIRS ".")
main 函数是一个非常简单的函数,它设置环境(例如 NVS_FLASH)并调用每个组件的设置函数并终止,将程序的控制权留给组件。
您绝对应该能够包含来自任何地方的文件。将 REQUIRES <component-name>
添加到 idf_component_register
命令应该可以解决问题:idf_component_register(SRCS "ble.c" INCLUDE_DIRS "." REQUIRES bt)
.
这是 IDF 中包含其他组件的一般方式。
在命令idf.py menuconfig
中,一旦启用蓝牙(Component config--->Bluetooth--->Bluetooth
),这些头文件将自动加载。
我正在使用 ESP-IDF 为 ESP32 开发一个项目。我试图在组件中使用蓝牙库,但编译器抱怨头文件不存在。包含来自 main.c 的相同头文件没有任何问题。我要包含的头文件是:
#include "esp_bt.h"
#include "esp_bt_main.h"
#include "esp_gatts_api.h"
#include "esp_gap_ble_api.h"
#include "esp_gatt_common_api.h"
为什么某些头文件只能从 main.c 中包含?是否有任何解决方案或是否必须在 main.c 文件中添加某些功能来安抚 ESP-IDF?
注意:我在尝试使用 HTTPS 服务器时遇到包含头文件的相同问题。
如果有任何相关性,这是我正在使用的项目结构:
- CMakeLists.txt
- Makefile
- sdkconfig
- main
- CMakeLists.txt
- component.mk
- main.c
- components
- component1
- component1.h
- component1.c
- CMakeLists.txt
CMakeLists.txt 个文件完全相同:
idf_component_register(SRCS "ble.c" INCLUDE_DIRS ".")
main 函数是一个非常简单的函数,它设置环境(例如 NVS_FLASH)并调用每个组件的设置函数并终止,将程序的控制权留给组件。
您绝对应该能够包含来自任何地方的文件。将 REQUIRES <component-name>
添加到 idf_component_register
命令应该可以解决问题:idf_component_register(SRCS "ble.c" INCLUDE_DIRS "." REQUIRES bt)
.
这是 IDF 中包含其他组件的一般方式。
在命令idf.py menuconfig
中,一旦启用蓝牙(Component config--->Bluetooth--->Bluetooth
),这些头文件将自动加载。