ele*_*ris 5 environment-variables visual-studio-code
我想在远程 Linux PC 上为嵌入式目标交叉编译一个项目,但它需要环境设置。
我有一个环境设置脚本。我可以在远程 Linux PC 上的 shell 中运行此脚本,它可以正确设置我的环境变量。构建脚本使用这些环境变量并在本地成功构建。
我使用远程 SSH 扩展通过 Visual Studio Code 连接到 PC。我似乎无法在外部 Visual Studio Code 中构建。即使我通过任务设置了环境,也没有设置环境变量。因此构建脚本无法找到正确的路径。
这是我的tasks.json文件:
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "env",
"type": "shell",
"command": "source",
"args": ["/opt/fslc-framebuffer/2.5-qt/environment-setup-armv7at2hf-neon-fslc-linux-gnueabi"]
},
{
"label": "qmake frontend",
"type": "shell",
"command": "/opt/fslc-framebuffer/2.5-qt/sysroots/x86_64-fslcsdk-linux/usr/bin/qmake",
"args": ["${workspaceFolder}/frontend/frontend.pro", "-config", "release", "CONFIG+=imx6ul-linux"],
"problemMatcher": [
"$gcc"
],
},
{
"label": "build frontend",
"dependsOn": [
"env",
"qmake frontend"
],
"dependsOrder": "sequence",
"problemMatcher": [],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
我也尝试了以下方法,但没有帮助:
有一种方法可以检索环境设置脚本设置的所有环境变量,并将其转换为 vscode 中 taks.json 的 json 格式:
env -i /bin/bash -c 'source <PATH_TO_SCRIPT>; printenv' | sed -En 's/(\w+)=(.*)/"\1":"\2",/p'
Run Code Online (Sandbox Code Playgroud)
在这种情况下:
env -i /bin/bash -c 'source /opt/fslc-framebuffer/2.5-qt/environment-setup-armv7at2hf-neon-fslc-linux-gnueabi; printenv' | sed -En 's/(\w+)=(.*)/"\1":"\2",/p'
Run Code Online (Sandbox Code Playgroud)
您可以将它们存储在tasks.json 的全局环境部分中(从字符串中删除最后一个逗号后):
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"options": {
"env": {
"GDB":"arm-fslc-linux-gnueabi-gdb",
"SDKTARGETSYSROOT":"/opt/fslc-framebuffer/2.5-qt/sysroots/armv7at2hf-neon-fslc-linux-gnueabi",
"CPP":"arm-fslc-linux-gnueabi-gcc -E -march=armv7-a -mthumb -mfpu=neon -mfloat-abi=hard --sysroot=/opt/fslc-framebuffer/2.5-qt/sysroots/armv7at2hf-neon-fslc-linux-gnueabi",
...
}
},
"tasks": [
]
}
Run Code Online (Sandbox Code Playgroud)
该命令的工作方式如下:
env -i /bin/bash在没有任何现有环境变量的情况下启动 bash(请参阅使用命令或 bash 脚本清理环境?)/bin/bash -c 'source /opt/fslc-framebuffer/2.5-qt/environment-setup-armv7at2hf-neon-fslc-linux-gnueabi; printenv' |导出环境变量并将其打印/通过管道传输到下一个命令sed -En 's/(\w+)=(.*)/"\1":"\2",/p'进行正则表达式替换以将其转换为 JSON 格式正则表达式替换示例
echo -e "A=10\nB=11" | sed -En 's/(\w+)=(.*)/"\1":"\2",/p'
或https://regex101.com/r/JgRrkg/1
生产
"A":"10",
"B":"11",
Run Code Online (Sandbox Code Playgroud)
现在不需要运行 env 任务,所有其他构建任务都会看到正确的路径和其他环境变量。
| 归档时间: |
|
| 查看次数: |
421 次 |
| 最近记录: |