Qt 提供 sdktool 用于创建套件。我用它来自动设置交叉编译工具包。
通常我应该调用
source environment_file_from_sdk
,然后在同一终端中启动 Qt Creator。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"'
。您的变量的值包含空格,因此您必须以不同的方式执行此操作(请参阅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循环中。