截止到2020/8/14,在ubuntu-16.04中使用sudo apt install cmake
安装的还是3.5.1版本的cmake,在ubuntu-20.04中则是3.16.3版本,而cmake官网上早已经更新到了3.18.1版本。
很多时候,一些开源项目需要高版本的cmake才能编译,所以我们需要从源码编译安装cmake,这一步网上有非常多的教程。
当我们跟着教程执行完sudo make install
以后,使用cmake --version
查看版本时,却会收到这样的报错:
CMake Error: Could not find CMAKE_ROOT !!!
CMake has most likely not been installed correctly.
Modules directory not found in
/usr/local/share/cmake-3.16
cmake version 3.16.3
关于这个问题,先说解决方式,其实只需要重新开一个终端,然后再使用cmake --version
命令,我们就可以正确看到我们刚刚安装的cmake的版本提示了,也就是说,其实根本不存在什么问题,只要关闭原来开启的终端就可以了。
那么为什么会出现这样的问题呢?其实要从哈希表说起,当我们刚刚打开一个终端时,此时哈希表只有一条记录。每当我们再执行命令时,哈希表会记录下这条命令的路径,就相当于缓存一样。
第一次执行命令shell解释器默认的会从PATH路径下寻找该命令的路径,当我们第二次使用该命令时,shell解释器首先会查看哈希表,没有该命令才会去PATH路径下寻找。
所以哈希表可以大大提高命令的调用速率,但是CMake Error: Could not find CMAKE_ROOT
错误的原因也出在这里,如果我们之前在这个终端执行过cmake
命令,那么哈希表就会自动记录下之前版本cmake的路径,我们可以通过输入hash -l
查看,如下图所示:
所以当我们更新了cmake以后,当我们输入cmake相关命令时,shell解释器便会去哈希表里面查找之前版本cmake的路径,然后便产生了错误。
所以其实也可以在该终端执行hash -r
命令来清除哈希表的内容,然后再执行cmake --version
命令,也可以消除报错,如下图所示: