只是从JS背景开始。

我正在研究物联网开发,并希望建立自己的存储库而不上传我的个人WiFi的SSID和密码。

据我了解,Platform IO提供了此platformio.ini来设置build_flags

  build_flags =
     -D SSID="MySSID"

我不知道如何从我的CPP文件访问它们。我想将构建标记SSID中的值注入(inject)到我的* .cpp文件中。
  #define SSID

  void loop()
  {
    Serial.println(SSID);
  }

上面没有向串行监视器写入任何内容。

我究竟做错了什么?该代码可以编译。

最佳答案

如@Azeem所述,您正在将SSID重新定义为一个空值。使用这样的预处理器,必须首先检查该值是否存在,如果不存在,则为其分配默认值。

这是一个简单的C++示例:

#include <iostream>

#ifndef SSID
#define SSID "(SSID not defined)"
#endif

int main()
{
    std::cout << "SSID value: " << SSID << std::endl;
    return 0;

}

您可以使用以下命令编译和运行代码:
g++ main.cpp -o main && ./main

如您所见,它显示(SSID not defined)

现在,编译并运行以下命令:
g++ main.cpp -o main -DSSID='"Hello, World!"' && ./main

将输出:SSID value: Hello, World!
如果您想了解更多有关预处理程序指令的信息,cplusplus.com has very nice tutorial

另外,不要忘记在Serial中启动void setup()

关于c++ - 如何使用Visual Code和Platform IO将环境变量注入(inject)CPP文件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52580643/

10-11 19:07