cmake的版本的更新以及和sudo cmake的区别
之前装Open3D,在使用cmake指令编译时报错,看了一下它的CMakeLists文件发现要求的cmake的最低版本为3.80,而我现在使用的Ubuntu16.04默认的cmake版本为3.5,所以导致了编译失败。虽然之后心怀侥幸地把cmake_minimum_required(VERSION 3.8.0)改为了cmake_minimum_required(VERSION 3.5.0),编译了也没报错,但是还是不敢瞎搞,所以去下了一个最新版的cmake。然后就开始了我辛酸的踩坑之路。
这里先提前说一下,cmake和sudo cmake是有区别的,在你更新完cmake版本之后,如果操作不当,很有可能导致它们的版本不同!我在网上搜了很长时间,发现基本上没有人没有人正面回答cmake和sudo cmake版本不同如何解决的问题。因此记录一下这个知识点,也不枉我浪费了这么多时间。
废话有点多哈,下面直接进入正题。可能会写的有些冗杂,但是博主还是希望尽可能解释清楚,能够知其然知其所以然。
首先是查看你当前的cmake版本。在终端分别输入
cmake --version
sudo cmake --version
正常情况下两者对应的版本应该是一致的,Ubuntu16.04对应的是cmake3.5版本。
之后如果你参考部分别的博文,它们下一步应该就是卸载原来的cmake(千万不要做)
sudo apt-get autoremove cmake
这一步会把你原来跟cmake编译好的包全给卸掉,我傻傻地跟着做完之后发现ROS不能用了,无奈又重装了一遍。
正确做法是下载一个新的安装包,然后用新版本覆盖掉。
可以考虑去官网下最新版本,选择Linux x86_64的。
或者在https://cmake.org/files/中选择过去的对应版本。
也可以执行下述语句
#这里选择我自己安装的cmake版本作为示例
wget http://www.cmake.org/files/v3.13/cmake-3.13.4.tar.gz
如果是在默认打开的终端上执行且没有指定目标下载路径的话,都会在home下面的用户文件夹下的得到*.tar.gz文件,执行下述命令得到解压缩文件
tar -xzvf cmake-3.13.4-Linux-x86_64.tar.gz
cd到cmake-3.13.4-Linux-x86_64文件夹下,发现有4个子文件夹
那么问题来了,明明很多其他博文里面写着执行 ./configure 命令或者 ./bootstrap 命令,这里怎么没有?因为骚年你下载的是免安装的,解压完成就可以用了。但是现在还不行,如果你此时使用cmake,你打开~/.bashrc文件会发现里面多了一句导入你当前cmake环境变量的语句,但是对应的路径是你解压包所在的位置。然后此时你再查看cmake和sudo cmake的版本,会发现两者是有区别的。
因为部分下载的包编译时一般都会要求权限,所以还是尽可能把cmake和sudo cmake的版本统一较好。
我们把解压后的cmake包放到/opt目录下面(/opt里的文件则是安装系统后用户自己安装的其他应用软件,一般是源码包的软件)。在当前目录下执行
sudo mv cmake-3.13.4-Linux-x86_64 /opt/
如果在此之前已经使用过新下载的cmake编译的,记得查看一下.bashrc文件里面的环境变量
sudo gedit ~/.bashrc
确认cmake的环境变量为,如果不是请修改或者添加
export PATH=/opt/cmake-3.13.4-Linux-x86_64/bin:$PATH
然后建立软连接
sudo ln -sf /opt/cmake-3.13.4-Linux-x86_64/bin/* /usr/bin/
因为我们在使用cmake时实际上就是调用了cmake-3.13.4-Linux-x86_64/bin/路径下的cmake来执行的,因此我们将这个bin下的所有文件全部软连接到/usr/bin/下面,这样就完成了sudo cmake的升级。在命令行下输入
cmake --version
sudo cmake --version
这样就同时完成了cmake和sudo cmake的升级。
以上便是全部内容,如有错误请及时提出~