Проект ESP-IDF с несколькими исходными файлами

#cmake #esp32 #esp-idf

Вопрос:

Я начал свой проект с простого примера «мигания» и использовал его в качестве шаблона для написания своего кода. В этом примере использовался только один исходный файл blink.c . В конце концов, я хочу использовать проект с несколькими исходными файлами и не могу понять, как настроить CMakeLists.txt его для компиляции проекта.

Мое CMakeLists.txt это:

 cmake_minimum_required(VERSION 3.5)

include($ENV{IDF_PATH}/tools/cmake/project.cmake)

project(blink)
 

Я хочу добавить, например init.c .
Я пробовал разные способы, но безуспешно.

Ни один из idf_component_register() / register_component() не работал на меня.

Есть идеи, как правильно настроить проект?

Ответ №1:

Верно, иерархия проектов CMake в ESP IDF немного сложнее. Вы смотрите не на тот CMakeLists.txt файл. Вместо того, который находится в корневом каталоге, откройте тот, в blink/main/CMakeLists.txt котором он находится . В этом файле перечислены исходные файлы для «основного» компонента, который вы хотите использовать. Это выглядело бы так:

 idf_component_register(SRCS "blink.c" "init.c"
                    INCLUDE_DIRS ".")
 

Убедитесь, что ваш init.c файл находится в том же каталоге, что и этот CMakeLists.txt и blink.c .

Я также рекомендую ознакомиться с документацией по системе сборки Espressif, она весьма полезна.

Комментарии:

1. Спасибо! Это сработало. Это выглядело для меня немного странно, теперь все части расставлены по своим местам.

Ответ №2:

Вам следует отредактировать CMakeLists.txt находится в вашей main папке внутри папки вашего проекта. Кроме того, вам необходимо указать каталог, содержащий заголовочные файлы, в INCLUDE_DIRS параметре.

Например, если в вашем проекте есть эта файловая структура (вы помещаете init.h ее в include папку), как показано ниже:

 blink/
├── main/
│   ├── include/
│   │   └── init.h
│   ├── blink.c
│   ├── CMakeLists.txt
│   ├── init.c
│   └── ...
├── CMakeLists.txt
└── ...
 

Содержимое в вашем main/CMakeLists.txt должно быть:

 idf_component_register(SRCS "blink.c" "init.c"
                    INCLUDE_DIRS "." "include")