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的升级。

以上便是全部内容,如有错误请及时提出~

访问https://cmake.org/download/下载最新的bash脚本。在我的例子中,cmake-3.26-Linux-x86_64.sh就足够了。从cmake 3.10.2开始,默认情况下安装程序似乎不再安装到/opt。切换到所需的安装目录(例如/opt/)将脚本复制到“/opt/”目录下。 CMake是一个跨平台的、开源的构建工具。cmake是makefile的上层工具,它们的目的正是为了产生可移植的makefile,并简化自己动手写makefile时的巨大工作量.目前很多开源的项目都可以通过CMake工具来轻松构建工程 cmake的官网:https://cmake.org/ 1,安装cmakesudo apt-get install cmake 2,安装gcc和g++ sudo apt-get install gcc sudo apt-get install g++ 两个缺少任何其 CMake - Cross Platform MakeWelcome to CMake, the cross-platform, open-source build system. CMake is a fa... 为什么下载CMake时一般要选择较老的版本而不是最新版本? 如果你下载的是最新版本CMake包,进行OpenCV编译的时候常常会出错。 这是因为CMake更新得比较快,OpenCV更新得比较慢。当前版本的OpenCV与最新版本CMake很可能是不相匹配的,编译时会出现各种错误。 推荐大家在下载CMake时选择与你的OpenCV当前版本相匹配的、较老一些的版本。 D:\01_cmake_win\winlib.c: fatal error C1001: 编译器中发生内部错误。 (编译器文件“msc1.cpp”,第 1511 行) 要解决此问题,请尝试简化或更改上面所列位置附近的程序。 请选择 Visual C++ “帮助”菜单上的“技术支持”命令,或打开技术支持帮助文件来获得详细信息。 D:\Program Fi... 有了前两篇博客的铺垫,我们可以来分享下另外两个参数了 flavorDimensions 和 productFlavors,而这两个参数成对出现,可以做一些差分化定义。 前两篇博客为: 1、defaultConfig——安卓gradle 2、buildTypes——安卓gradle 二、flavorDimensions 的意义 三、productFlavors的意义 四、product... 转载:https://www.hahack.com/codes/cmake 为什么需要CMake 如果你一直在windows平台上开发,使用最多的可能就是VS的开发环境,它已经集成了全套的开发环境包括构建编译等。你或许听过好几种 Make 工具,例如 GNU Make ,QT 的 qmake ,微软的 MS nmake,BSD Make(pmake),Makepp,等等。这些 Make 工具遵循着不同的规范和标准,所执行的 Makefile 格式也千差万别。这样就带来了一个严峻的问题:如果软件想跨平台,必须