Я пытаюсь начать работу с PlatformIO и попал в стену с включенными приоритетами и / или переменными областями.
Мой код состоит из программы src/main.cpp
, а также нескольких частных библиотек, которые находятся в папке lib/<libname>/*.cpp/h
.
Я хочу иметь глобальный объект внешнего класса ( Syslog ), который будет доступен как для моей основной программы, так и для любых добавленных мной частных библиотек.
В настоящее время я пробовал 2 подхода, которые оба отказываются компилировать:
Создайте объект в main.cpp с ключевым словом extern, инициализируйте объект в setup()
следующим образом:
ЦСИ / 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);
}
ЦСИ / 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