赞
踩
这真的是一个很好用的命令,合乎逻辑,操作简单。
比如,我有两个版本的gcc及g++,分别在如下两个目录:
/usr/bin/gcc-5
/usr/bin/g++-5
/usr/local/bin/gcc-7
/usr/local/bin/g++-7
首先将这两个版本都配置好,具体的用法参照这里。
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 50 --slave /usr/bin/g++ g++ /usr/bin/g++-5
sudo update-alternatives --install /usr/bin/gcc gcc /usr/local/bin/gcc-7 40 --slave /usr/bin/g++ g++ /usr/local/bin/g++-7
# 50,70是优先级,优先级高在auto模式下会被自动选定。
# --slave 表示其后的版本会跟随 gcc 一同切换
配置好后,使用如下命令选择需要的版本
$ sudo update-alternatives --config gcc
There are 2 choices for the alternative gcc (providing /usr/bin/gcc).
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/local/bin/gcc-7 70 auto mode
1 /usr/bin/gcc-5 40 manual mode
2 /usr/local/bin/gcc-7 70 manual mode
Press <enter> to keep the current choice[*], or type selection number: 1
移除某个版本:
sudo update-alternatives --remove gcc /usr/bin/* # *为指定版本,如gcc-5
出于好奇,可以看看这个 update-alternatives 命令是如何实现的。
'首先看一下使用gcc命令时,被调用的gcc存在了哪里'
book@www.100ask.org:~$ which gcc
/usr/bin/gcc
'看一下这个/usr/bin/gcc 文件'
book@www.100ask.org:~$ ls /usr/bin/gcc -l
lrwxrwxrwx 1 root root 21 2月 24 11:36 /usr/bin/gcc -> /etc/alternatives/gcc
'继续查看软链接的指向'
book@www.100ask.org:~$ ls /etc/alternatives/gcc -l
lrwxrwxrwx 1 root root 14 2月 24 12:01 /etc/alternatives/gcc -> /usr/bin/gcc-5
至此,大概也就明白update-alternatives 命令是如何工作的了,如下
我的gcc-7 是自己编译安装的,它默认的目录是 /usr/local/bin/gcc,没错,名字就是gcc,而不是gcc-7。刚开始有个奇怪的问题,我使用update-alternatives --config gcc 无论怎么切换,gcc -v显示始终都是 7,怎么都切不到 gcc-5 上去。
这里就要注意了,看下环境变量里目录的优先级:
book@www.100ask.org:~$ echo $PATH
/home/book/bin:/home/book/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/work/tools/gcc-3.4.5-glibc-2.3.6/bin:/work/tools/gcc-3.4.5-glibc-2.3.6/bin/:/snap/bin:/work/tools/gcc-arm-8.2-2019.01/gcc-arm-8.2-2019.01-x86_64-aarch64-linux-gnu/bin
可以看到,/usr/local/bin 是排在 /usr/bin 前面的,所以每次使用 gcc 命令是,会直接访问到 /usr/local/bin/gcc ,而不是/usr/bin/gcc -> /etc/alternatives/gcc -> /usr/bin/gcc-X
解决也很简单,把/usr/local/bin/gcc 的名字改成 gcc-7 就行了。重新update-alternatives --install
后可能需要重启一下shell 才能生效。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。