前提
假如我们现在有这样的一个需求,在Linux下编译A工程时需要cmake的版本为3.26,编译B工程时需要cmake的版本为3.24,编译C工程时需要cmake的版本为3.22。每个工程必须需要对应的cmake版本,否则无法编译。这样就意味着我们的电脑上有3个版本的cmake,如何对其进行管理切换呢?下面我们介绍update-alternatives这个工具。
update-alternatives介绍
现在我们从官网下载了3个版本的cmake,同时还有我们本地通过apt install
安装的cmake。如下图所示:
我们输入cmake
,本质上调用的是我们通过apt install
安装的cmake。现在我们要编译A工程,需要cmake的版本为3.26,也就是说输入cmake --version
,输出的是3.26。该怎么办呢?
在使用update-alternatives进行操作之前,我们先对/usr/binc/cmake
该名为cmake-
,加上它的版本号,方便我们观察。这样我们有了四个版本的cmake,分别如下:
- cmake-3.10.2,路径: /usr/bin/cmake-3.10.2
- cmake-3.24.0,路径:/opt/cmake-3.24/bin/cmake
- cmake-3.22.0,路径:/opt/cmake-3.22/bin/cmake
- cmake-3.26.0,路径:/opt/cmake-3.26/bin/cmake
update-alternatives 注册 --install
第一步就是注册,使用update-alternatives告诉系统,我都有哪几个版本的cmake。
其中--install
表示注册,/usr/bin/cmake
表示软链接,cmake
表示服务名,/opt/cmake-3.xx/bin/cmake
代表cmake的真实路径,后面的数字代表着优先级,数字越大,代表优先级越高。
大白话就是,我们在/usr/bin
目录下建立了一个/usr/bin/cmake
的软链接,它可以指向不同的cmake版本。
现在我们再次查看cmake的版本,发现已经变为了3.26。
–list 命令
我们可以使用update-alternatives --list cmake
来查看一共有几个不同的cmake。
注意:这里只会显示我们使用--install
注册的cmake,如果我们的电脑上还有一个cmake-3.20,但是没有注册过,它是不会显示的。
–config 命令
加入我们现在想使用3.24版本的cmake怎么办呢?简单,修改软链接对应的真实cmake版本就可以,这个可以使用--config
命令。
删除某一个链接
我们可以使用--query
命令来查看cmake的所有链接信息。
其中Priority代表了不同链接的优先级。截至到现在,似乎这个优先级没有起到什么作用,想使用哪个版本的cmake,我们使用--config
进行切换就可以了。但有的时候我们想使用优先级最高的cmake,使用--config
切换比较麻烦,可以直接使用--auto
来切换到优先级最高的cmake。
默认情况下,cmake的版本都是auto mode
(自动模式),自动模式的cmake永远是优先级最高的cmake版本。当然也可使用--config
切换为手动模式(manual mode
)。
参考链接
- https://blog.csdn.net/qq_39945938/article/details/119104134