bash 无法从文件向 Qt sdktool 提供环境变量

问题描述 投票:0回答:1

Qt 提供 sdktool 用于创建套件。我用它来自动设置交叉编译工具包。
通常我应该调用

source environment_file_from_sdk
,然后在同一终端中启动 Qt Creator。
我已经根据我的需要调整了 configure-qtcreator.sh 。然而,在最后一步(addKit)我想提供来自
environment_file_from_sdk
的所有导出作为 --env var
所以

ENV_VALUES=$(grep "export " $SDK_PATH/../environment-setup-cortexa53-crypto-veld-linux | tr -d '"' | sed -e 's/export //;s/^\(.*\)/--env "\1"/')

当我通过 echo 打印这个变量时 - 它看起来不错。一套

--env "<var>=<long_or_multiple_values>"
.
当我将其添加到
sdktool addKit
命令

sdktool addKit
....
--cmake-config QT_QMAKE_EXECUTABLE:FILEPATH=$SDK_PATH/x86_64-pokysdk-linux/usr/bin/qmake \
$ENV_VALUES

由于参数解析失败而失败。 Bash

set -x
命令打印显示大量
--env <var>=<value>
已被单引号包围,看起来像
--env '"ARCH=arm64"' --env '"CROSS_COMPILE=aarch64-veld-linux-"' --env '"OECORE_TUNE_CCARGS=-mcpu=cortex-a53' -march=armv8-a+crc+crypto '-mbranch-protection=standard"'

怎么解决?

linux bash qt qt-creator
1个回答
0
投票

您的变量的值包含空格,因此您必须以不同的方式执行此操作(请参阅https://mywiki.wooledge.org/BashFAQ/050)——您需要使用数组:

# initialize an empty array
env_vars=()

# read the sed output
while IFS= read -r env_var; do
    # add this variable as an env option
    env_vars+=( --env "$env_var" )
done < <(
    sed 's/^export //p' "$env_file"
) 

sdktool addKit ... "${env_vars[@]}"

所有报价都是绝对必需的。

< <(...)
部分不是拼写错误——即将进程替换的输出重定向到while-read循环中。

© www.soinside.com 2019 - 2024. All rights reserved.