1

我正在使用 PlatformIO,目前正在为 ESP32 开发代码。我有一些子库,我希望能够在其中进行调试日志记录。

为了启用调试日志,我认为最好#define MYDEBUG在 main.cpp 中设置一个常量,然后在包含的库中对其进行评估。我把我的代码分解成这个简单的例子:

主.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

我在这里监督什么?

提前致谢, 蒂莫

4

1 回答 1

1

您对MYDEBUGin的定义main.cpp仅影响. 它对您编译的任何其他文件都不可见。main.cpp#define

做你想做的事情的最好方法是将定义添加到你的platformio.ini文件中。

尝试在项目的部分中添加如下所示的行:

build_flags = -DMYDEBUG

如果您需要设置MYDEBUG为特定值,您可以将其写为:

build_flags = -DMYDEBUG=23

这将告诉编译器为MYDEBUG它编译的每个文件定义常量。

于 2019-04-28T00:18:35.027 回答