Я пытаюсь начать работу с PlatformIO и попал в стену с включенными приоритетами и / или переменными областями действия.
Мой код состоит из src/main.cpp
программа, а также несколько частных библиотек, которые находятся в lib/<libname>/*.cpp/h
место нахождения.
Я хочу иметь глобальный объект внешнего класса (Syslog), которая доступна как для моей основной программы, так и для любых личных библиотек, которые я добавил.
В настоящее время я пробовал 2 подхода, которые оба отказываются компилировать:
Создайте объект в main.cpp с ключевым словом extern, инициализируйте объект в setup()
вот так:
SRC / main.cpp:
#include <Syslog.h>
#include <WiFiUdp.h>
WiFiUDP SyslogUDP;
extern Syslog syslog;
void setup()
{
syslog = Syslog(SyslogUDP, "255.255.255.255", 514, "FlyballETS", "FlyballETSApp", LOG_INFO, SYSLOG_PROTO_BSD);
}
Библиотека / GPSHandler / GPSHandler.cpp:
void GPSHandlerClass::init(HardwareSerial * SerialPort)
{
syslog.logf_P("GPS Class initialized!");
}
Это приводит к ошибкам компилятора, таким как:
lib\GPSHandler\GPSHandler.cpp:22:4: error: 'syslog' was not declared in this scope
2-й подход, который я попробовал (это работает в Arduino IDE), создавал небольшой SyslogHelper.h
файл, который создал extern Syslog syslog;
объект, а затем включить этот вспомогательный файл во все мои личные библиотеки, например так:
SRC / main.cpp:
#include "SyslogHelper.h"#include <WiFiUdp.h>
WiFiUDP SyslogUDP;
void setup()
{
syslog = Syslog(SyslogUDP, "255.255.255.255", 514, "FlyballETS", "FlyballETSApp", LOG_INFO, SYSLOG_PROTO_BSD);
}
SRC / SyslogHelper.h:
#include <Syslog.h>
extern Syslog syslog;
Библиотека / GPSHandler / GPSHandler.cpp:
#include "SyslogHelper.h"void GPSHandlerClass::init(HardwareSerial * SerialPort)
{
syslog.logf_P("GPS Class initialized!");
}
Когда я пытаюсь скомпилировать это в PlatformIO, происходит сбой, потому что в то время, когда он пытается скомпилировать SyslogHelper.h, он, похоже, не знает о местонахождении <Syslog.h>
файл:
In file included from lib\GPSHandler\GPSHandler.cpp:7:0:
src/SyslogHelper.h:4:20: fatal error: Syslog.h: No such file or directory
Задача ещё не решена.
Других решений пока нет …