C ++: использовать константу #define во включенных заголовочных файлах (Arduino) - PullRequest
1 голос
/ 28 апреля 2019

Я использую PlatformIO и в настоящее время разрабатываю код для ESP32. У меня есть несколько библиотек, в которых я хочу иметь возможность ведения журнала отладки.

Чтобы включить журнал отладки, я подумал, что было бы неплохо установить константу через #define MYDEBUG или около того в main.cpp, который затем оценивается внутри включенных библиотек. Я разбил свой код на этот простой пример:

main.cpp:

#include <Arduino.h>

#define MYDEBUG
#include "LedSetup.h"

void setup()
{
  Serial.begin(9600);

  LedSetup::doSomething();

  Serial.println("Is there output?");
}

void loop()
{

}

LedSetup.h:

#ifndef LedSetup_h_
#define LedSetup_h_

#include <Arduino.h>

class LedSetup
{
public:
  static void doSomething();

private:
  static void logDebug(String message)
  {
#ifdef MYDEBUG
    Serial.print("LedSetup: ");
    Serial.println(message);
#endif
  }
};

#endif

LedSetup.cpp:

#include "LedSetup.h"

void LedSetup::doSomething()
{
    logDebug("Did something!");
}

Когда я запускаю это, я ожидаю увидеть две строки в последовательном журнале: Did something! и Is there output? Но я вижу только Is there output. Очевидно, что определение MYDEBUG недоступно во включенном заголовочном файле. Почему?

Ранее я видел нечто похожее, где они используют #define как способ настройки вещей во включаемых заголовочных файлах, например, здесь: https://github.com/FastLED/FastLED/wiki/ESP8266-notes

Что я здесь наблюдаю?

Заранее спасибо, Timo

1 Ответ

1 голос
/ 28 апреля 2019

Ваше определение MYDEBUG в main.cpp влияет только на код в main.cpp после #define. Он не виден ни для каких других файлов, которые вы компилируете.

Лучший способ сделать то, что вы пытаетесь сделать, это добавить определение в ваш файл platformio.ini.

Попробуйте добавить строку, похожую на эту, в раздел вашего проекта:

build_flags = -DMYDEBUG

Если вам нужно установить MYDEBUG на конкретное значение, вы бы написали его как:

build_flags = -DMYDEBUG=23

Это скажет компилятору определить константу MYDEBUG для каждого файла, который он компилирует.

...