Как сделать файлы CPP видимыми для компоновщика в проекте ESP8266 Eclipse - PullRequest
0 голосов
/ 31 января 2020

В Eclipse IDE есть проект "hello world", который должен компилироваться с ESP8266 RTOS SDK.

Структура файла выглядит следующим образом

project structure

Я добавил один класс 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. Это то, что я получаю в журнале сборки build errors

Если поместить файлы классов рядом с файлом main.cpp, сборка завершится успешно. Однако со временем появятся сотни файлов, и без какой-либо группировки они быстро превратятся в неуправляемый беспорядок.

В качестве альтернативы я мог бы поместить этот класс в папку верхнего уровня components и снабдить его пустым component.mk файл. Это также сделало бы систему сборки счастливой, однако заставило бы меня использовать уродливые заголовки, такие как ../components/blinker/Blinker.h, которых я бы хотел избежать.

Так что вопрос в том, как сделать систему сборки осведомленной. * Файлы 1035 * и. cpp, находящиеся в подпапках папки main?

1 Ответ

0 голосов
/ 03 февраля 2020

Попробуйте добавить blinker/Blinker.cpp к вашему CMakeLists.txt.
Взгляните на Как добавить новый исходный файл в CMakeLists.txt?

...