最小项目目录结构
├── CMakeLists.txt
├── main
│ ├── CMakeLists.txt
│ └── main.c
└── README.md
- ESP-IDF 给用户的函数入口在
void app_main(void)
./CMakeLists.txt
管理整个工程./main/CMakeLists.txt
管理./main
文件夹中的所有文件
若要将 .c & .h 文件区分开,往往会创建一个或多个目录来装载它们。
如以下目录( 该树状图经过裁剪,尽可能只保留了用户创建的目录 )
├───.devcontainer
├───.vscode
├───main
│ └───include
└───managed_components
├───espressif__esp_tinyusb
│ ├───include
│ ├───include_private
│ ├───test
│ │ └───local
│ └───test_app
│ └───main
└───espressif__tinyusb
有以上目录,以下是我在./main/CMakeLists.txt
的配置
idf_component_register(SRCS "My_mcu_sleep_init.c" "My_WIFI_init.c" "led_strip_encoder.c" "My_LED_init.c" "My_https_request.c" "My_timer_init.c" "My_GPIO_init.c" "My_usb_device.c" "app_main.c"
INCLUDE_DIRS "./include"
EMBED_TXTFILES server_root_cert.pem local_server_cert.pem)
于是我们的 .h 文件就都被装到 ./main/include
这个目录里头了,但是这些 .c 文件还是逐个添加,虽然我创建文件写好以后直接编译,它就自动写入./main/CMakeLists.txt
,但是这样确实也不方便阅读。
于是我又尝试把 .c 文件都装到同一目录中,就有了以下./main/CMakeLists.txt
idf_component_register(#SRCS "My_mcu_sleep_init.c" "My_WIFI_init.c" "led_strip_encoder.c" "My_LED_init.c" "My_https_request.c" "My_timer_init.c" "My_GPIO_init.c" "My_usb_device.c" "app_main.c"
SRC_DIRS "./source"
INCLUDE_DIRS "./include"
EMBED_TXTFILES server_root_cert.pem local_server_cert.pem)
↑ 但这样的 cmake 是大错特错的 ↑
这样会导致编译的时候一直找不到 void app_main(void)
这个函数入口
↓ 最后是这样解决的 ↓
file(GLOB_RECURSE SOURCES "./source/*.c")
idf_component_register(
SRCS ${SOURCES}
INCLUDE_DIRS "./include/")
这才算是编译成功了,没有弹出找不到 void app_main(void)
的错误
添加组件
├───.devcontainer
├───.vscode
├───main
│ └───include
└───managed_components
├───espressif__esp_tinyusb
│ ├───include
│ ├───include_private
│ ├───test
│ │ └───local
│ └───test_app
│ └───main
└───espressif__tinyusb
↑ 见以上目录,可以看见./managed_components
↑
有时候某些功能 ESP-IDF 并不会内置,因此需要添加外置的组件才能使用相应的 API,如:TinyUSB
鉴于楼主才疏識浅,是用 ESP-IDF terminal 输入指令 idf.py add-dependency esp_tinyusb
一键生成的
参考网站:
- https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.1/esp32s3/api-guides/build-system.html#cmake-buildsystem-api
- https://blog.csdn.net/sinat_36568888/article/details/125428659
- https://cmake.org/cmake/help/latest/command/file.html
- https://components.espressif.com/components/espressif/esp_tinyusb/versions/1.4.5?language=en
- https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/api-reference/peripherals/usb_device.html