I'm using PlatformIO and I'm currently developing code for an ESP32. I have some sub libraries in which I want to be able to do debug logging.

To enable the debug log I thought it would be nice to set a constant via #define MYDEBUG or so in the main.cpp which then is evaluated inside the included libraries. I broke my code down to this simple example:


#include <Arduino.h>

#define MYDEBUG
#include "LedSetup.h"

void setup()


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

void loop()



#ifndef LedSetup_h_
#define LedSetup_h_

#include <Arduino.h>

class LedSetup
  static void doSomething();

  static void logDebug(String message)
#ifdef MYDEBUG
    Serial.print("LedSetup: ");



#include "LedSetup.h"

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

When I run this I would expect to see two lines in the serial log: Did something! and Is there output? But I only see Is there output. So obviously the define of MYDEBUG is not available in the included header file. Why?

I have seen something similiar before where they use #define as a way of setting up things in included header files, for example here: https://github.com/FastLED/FastLED/wiki/ESP8266-notes

What am I overseeing here?

Thanks in advance, Timo

1 Answers

John Romkey On Best Solutions

Your definition of MYDEBUG in main.cpp only affects the code in main.cpp after the #define. It's not visible to any other files you compile.

The best way to do what you're trying to do is to add the define to your platformio.ini file.

Try adding a line that looks like this to the section for your project:

build_flags = -DMYDEBUG

If you needed to set MYDEBUG to a specific value you'd write it as:

build_flags = -DMYDEBUG=23

This will tell the compiler to define the constant MYDEBUG for every file it compiles.