【问题标题】:Access of outer environment variable in PlatformIOPlatformIO中外部环境变量的访问
【发布时间】:2020-09-30 12:19:03
【问题描述】:

我目前正在努力将一些环境变量“注入”到 PlatformIO 构建过程中。由于我的 dockerized 堆栈,我在 .env 文件中的根目录下管理一些秘密。我的项目结构类似于这样:

Project
|- .env
|- iot
|--- iot-project-1
|----- lib
|----- src
|------- main.cpp
|----- platformio.ini
|----- [...]

现在我想使用 main.cpp.env 文件中的环境变量。 这是我想出的,但没有按预期工作:

.env

FOO=hello

platformio.ini

build_flags = '-DFOOOO=${sysenv.FOO}'

ma​​in.cpp

#define XSTR(x) #x
#define STR(x) XSTR(x)

const char* fo123 = STR(FOOOO);

void setup() {
  Serial.begin(115200);
  Serial.println(fo123);
}

任何人都知道我的案例可能的解决方法是什么?

【问题讨论】:

    标签: c++ environment-variables platformio


    【解决方案1】:

    您可以使用以下两种解决方案之一:

    1. 通过 environment variables 使用 platfomio 建议

    blog post 中描述的想法但不是使用.env 文件

    1. 通过 advanced scripting 使用 platformio 建议

    示例:

    Project
    |- .env
    |- env-extra.py
    |- platformio.ini
    |- src
    |--- main.cpp
    |- lib
    

    .env

    FOO=hello
    

    platformio.ini

    extra_scripts =
      pre:env-extra.py
    

    ma​​in.cpp

    #define XSTR(x) #x
    #define STR(x) XSTR(x)
    
    const char* fo123 = STR(FOO);
    
    void setup() {
      Serial.begin(115200);
      Serial.println(fo123);
    }
    

    env-extra.py

    from os.path import isfile
    Import("env")
    assert isfile(".env")
    try:
      f = open(".env", "r")
      lines = f.readlines()
      envs = []
      for line in lines:
        envs.append("-D{}".format(line.strip()))
      env.Append(BUILD_FLAGS=envs)
    except IOError:
      print("File .env not accessible",)
    finally:
      f.close()
    

    脚本 env-extra.py 读取您的文件 .env 并附加 BUILD_FLAGS

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-26
      • 2010-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多