В Eclipse IDE есть проект "hello world", который должен компилироваться с ESP8266 RTOS SDK.
Структура файла выглядит следующим образом
Я добавил один класс C ++ и поместил его в свою собственную папку. Вот заголовок класса
#ifndef MAIN_BLINKER_BLINKER_H_
#define MAIN_BLINKER_BLINKER_H_
class Blinker {
public:
Blinker( int period );
int Period() const;
private:
int period_;
};
#endif /* MAIN_BLINKER_BLINKER_H_ */
и определения
#include "Blinker.h"
Blinker::Blinker( int period ) :
period_( period )
{}
int Blinker::Period() const {
return this->period_;
}
Main. cpp Файл похож на этот
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "blinker/Blinker.h"
extern "C" {
void app_main()
{
auto blnk = Blinker( 3000 );
int i = 0;
while ( 1 ) {
printf( "[%d] Hello beautiful world!\n", i );
i++;
vTaskDelay( blnk.Period() / portTICK_PERIOD_MS );
}
}
}
Он компилируется, но завершается с ошибкой Этап, потому что компоновщик (или то, что должно быть компоновщиком в цепочке инструментов xtensa) не видит определения методов Blinker. Это то, что я получаю в журнале сборки
Если поместить файлы классов рядом с файлом main.cpp
, сборка завершится успешно. Однако со временем появятся сотни файлов, и без какой-либо группировки они быстро превратятся в неуправляемый беспорядок.
В качестве альтернативы я мог бы поместить этот класс в папку верхнего уровня components
и снабдить его пустым component.mk
файл. Это также сделало бы систему сборки счастливой, однако заставило бы меня использовать уродливые заголовки, такие как ../components/blinker/Blinker.h
, которых я бы хотел избежать.
Так что вопрос в том, как сделать систему сборки осведомленной. * Файлы 1035 * и. cpp, находящиеся в подпапках папки main
?