Linux快速切换交叉编译器版本

确保/usr/local/arm下有以下命令格式的交叉编译器文件夹:

1
gcc-版本号-arm-linux-gnueabihf

比如

1
gcc-7.5.0-arm-linux-gnueabihf

Shell文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#!/bin/bash

# 所有工具链的根目录
TOOLCHAIN_ROOT="/usr/local/arm"

# 显示所有可用版本
function list_versions() {
echo "Available toolchain versions:"
for dir in "$TOOLCHAIN_ROOT"/gcc-*; do
ver=$(basename "$dir" | sed 's/^gcc-\(.*\)-arm.*/\1/')
echo " - $ver"
done
}

# 显示当前交叉编译器版本
function current_version() {
which arm-linux-gnueabihf-gcc >/dev/null 2>&1 || {
echo "arm-linux-gnueabihf-gcc not found in PATH"
return
}

echo -n "Current compiler version: "
arm-linux-gnueabihf-gcc -v 2>&1 | grep "gcc 版本" | awk '{print $3}'
}

# 切换工具链
function switch_version() {
local version=$1
local match_dir="$TOOLCHAIN_ROOT/gcc-${version}-arm-linux-gnueabihf"

if [ ! -d "$match_dir" ]; then
echo "Error: Toolchain version $version not found in $TOOLCHAIN_ROOT"
list_versions
return 1
fi

# 清除当前 PATH 中旧的 toolchain 目录
export PATH=$(echo "$PATH" | tr ':' '\n' | grep -v "$TOOLCHAIN_ROOT" | paste -sd ':' -)
# 加入新版本路径
export PATH="$match_dir/bin:$PATH"

echo "Switched to toolchain version $version"
current_version
}

# 参数处理
case "$1" in
list)
list_versions
;;
current)
current_version
;;
switch)
if [ -z "$2" ]; then
echo "Usage: source toolchain-switcher.sh switch <version>"
else
switch_version "$2"
fi
;;
*)
echo "Usage:"
echo " source toolchain-switcher.sh list # List available versions"
echo " source toolchain-switcher.sh current # Show current version"
echo " source toolchain-switcher.sh switch 4.9.4 # Switch to version"
;;
esac

仅在当前终端中一次性有效


Linux快速切换交叉编译器版本
http://akichen891.github.io/2025/04/12/Linux快速切换交叉编译器版本/
作者
Aki
发布于
2025年4月12日
更新于
2025年4月12日
许可协议