首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PlatformIO中外部环境变量的访问

PlatformIO中外部环境变量的访问
EN

Stack Overflow用户
提问于 2020-06-10 23:01:31
回答 1查看 362关注 0票数 0

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

代码语言:javascript
复制
Project
|- .env
|- iot
|--- iot-project-1
|----- lib
|----- src
|------- main.cpp
|----- platformio.ini
|----- [...]

现在,我希望使用main.cpp中的main.cpp文件中的环境变量。这是我想出来的,但并没有像预期的那样起作用:

.env

代码语言:javascript
复制
FOO=hello

platformio.ini

代码语言:javascript
复制
build_flags = '-DFOOOO=${sysenv.FOO}'

main.cpp

代码语言:javascript
复制
#define XSTR(x) #x
#define STR(x) XSTR(x)

const char* fo123 = STR(FOOOO);

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

有人知道我的案子可能有什么解决办法吗?

EN

回答 1

Stack Overflow用户

发布于 2021-03-22 15:21:24

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

  1. 环境变量一起使用platfomio建议

在这个博客帖子中描述的思想,但它不是使用.env文件

  1. 高级脚本一起使用platformio建议

示例:

代码语言:javascript
复制
Project
|- .env
|- env-extra.py
|- platformio.ini
|- src
|--- main.cpp
|- lib

.env

代码语言:javascript
复制
FOO=hello

platformio.ini

代码语言:javascript
复制
extra_scripts =
  pre:env-extra.py

main.cpp

代码语言:javascript
复制
#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

代码语言:javascript
复制
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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62314497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档