gcc/g++升级、Cmake升级
0 前言
今天将WSL中自带的gcc/g++升级了,以适应的C++的新特性。
先通过lsb_release -a
命令查看一下对应的系统,我的是Ubuntu 20.04.6 LTS,focal
我之前在安装系统的时候,系统自带了一个gcc,可能是我用sudo apt install build-essential
这个命令的时候自动给我下载的,自带的版本是gcc-9 最多支持C++14,所以我今天对这个进行了升级。
本应该是最简单的方法
sudo apt install gcc-13 g++-13
我写这篇博客的时候已经出到13了GNU官网
但是apt并没有添加这个最新的源,所以上面命令是执行不了的,我们需要采用下面的方法。
1 添加PPA源
我看网络上有些教程是直接输入命令sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
就成功添加了PPA的源,后面你可以参考这个文章下载
但是我添加的时候出现了Error: retrieving gpg key timed out.
的错误,反正不知道什么原因,可能网络连接有问题了或者操作系统版本问题。
ps:我第一次写这个博客的时候系统是focal(Ubunutu20.04),当时自动添加源失败了,现在用(22.04)自动添加就成功了。
然后我只能手动添加这个源了,过程如下。
1.1 进入官网查找你所需的软件工具
官网地址PPA Lauchpad
在搜索中查找你需要的工具,比如我这里找ubuntu-toolchain-r
,会出现一堆搜索结果,自己想办法找一下对应的。
这里有个过滤器(filter),注意我之前用lsb_release -a
查看过我的系统是focal版本的,所以这里就选了focal,发现正好有13版本的,说明找对了。
1.2 手动添加源
这里同样选择对应版本,focal版本对应Ubuntu的20.04, 复制图中对应的如下代码,写入到sources.list
文件中。
deb https://ppa.launchpadcontent.net/ubuntu-toolchain-r/test/ubuntu focal main
deb-src https://ppa.launchpadcontent.net/ubuntu-toolchain-r/test/ubuntu focal main
sources.list
文件在/etc/apt/
路径下,这个文件管理软件源,会换源的朋友自然知道这个文件在哪。
添加好了,保存退出,效果如下图所示。
1.3 添加证书
在终端中输入sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys (KEY_ID)
,其中KEY_ID替换成网站上的Fingerprint
1.4 证书更新
sudo apt-get update && sudo apt-get upgrade
1.5 下载对应的软件
sudo apt install gcc-13 g++-13
这个命令可以正常使用了。
1.6 下载完成之后
其实你此时输入g++ -v/ --version
或者gcc -v/ gcc --version
,你会发现还是找不到命令,但是你输入gcc-13 g++-13
的命令都可以用。
其实你已经下载好了,你可以在/usr/bin/
目录下看到对应的gcc-13, g++-13
,此时你需要做一步软链接,将其和gcc,g++
绑定起来。
1.7 软链接
在终端中输入下面命令:
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-13 100
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-13 100
此时将gcc-13软链接到gcc命令上,并设为最高优先级(100)的。
此时终端输入gcc g++啥的都正常了。
补充 update-alternatives
我这里用update-alternatives
这个工具来管理,因为有些时候,可能你的系统里有多个版本的工具
某些情况下,比如不同项目要求,所以开发者的电脑中可能有多个版本的编译器,这时候我们需要对这些进行管理
所以借助update-alternatives
这个工具,我们可以实现对多个工具的版本管理。
语法如下
update-alternatives --install <link> <name> <path> <priority>
link是一个软连接,name是一个别名,path是工具的完整路径,priority是优先级,数字越大优先级越高。
例如,系统中已安装了python 2.7,现在又安装了python 3.6,可以用以下命令注册:
update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
update-alternatives --install /usr/bin/python python /usr/bin/python3.6 2
此时当我们在终端输入python的时候,优先使用的是python3.6版本。当我想用别的版本时,可以用update-alternatives --config python
查看所有版本,然后切换(你自己试试看)。
2 Cmake升级最新版本
-
去github上确定一下最新的版本是多少,我这里看到最新的版本是3.28.0
-
开始下载
# 下载对应版本
wget https://github.com/Kitware/CMake/releases/download/v3.28.0-rc6/cmake-3.28.0-rc6-linux-x86_64.tar.gz
# 解压
tar -zxvf cmake-3.28.0-rc6-linux-x86_64.tar.gz
- 我下载的版本并不是二进制源码版本,而是二进制release版本,所以不需要像这个教程一样还需要编译源码。
我原来直接将压缩包解压到用户根目录(
~
)下,我把它移动到/usr/src/
下
添加到系统环境变量里
sudo sh -c 'echo export PATH="/usr/src/cmake/bin:$PATH" >> /etc/profile'
# 重启客户端
exit
# 测试
cmake --version