#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")