"cmake --version"指向/usr/bin/cmake,而"which cmake"指向/usr/local/bin。

24

我正在尝试在我的Linux电脑上升级cmake。这是我使用的命令。

删除旧的cmake:

sudo apt purge --auto-remove cmake

https://cmake.org/download/下载并解压cmake-3.13.3.tar.gz。

然后在解压后的cmake文件夹中:

./bootstrap
make 
sudo make install 

当我运行 cmake --version 时,它返回

bash: /usr/bin/cmake: No such file or directory

这表明/usr/bin中不存在cmake可执行文件。 然而,当我运行which cmake时,它返回

/usr/local/bin/cmake

确实存在。

如何让我的cmake命令指向/usr/local/bin/cmake

我的 $PATH 显示为

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

编辑:与其他问题不同,因为我确切知道cmake可执行文件的位置,只是--versionwhich的效果不同。


which 命令输出和通过可执行文件名运行实际程序的区别意味着在您的情况下 cmake 是一个 别名。例如,参见 Unix&Linux 上的这个问题:https://unix.stackexchange.com/questions/85249/why-not-use-which-what-to-use-then 您需要删除该别名以使 cmake 引用其实际位置。该问题不特定于 cmake,因此与 编程 无关。 - Tsyvarev
5个回答

51
在bash中,您可以使用hash -r命令忘记所有之前执行的命令的位置信息。

19

结果我发现需要退出shell才能生效。一旦我启动一个新的shell终端,cmake --version 就能正常工作。


7
在 /usr/bin 中创建符号链接对我很有用:
sudo ln -s /usr/local/bin/cmake /usr/bin/cmake

0

安装会启动一个新的 shell;当安装结束后,输入 exit,cmake 就可以工作了。


0
根据github/cmake readme所述:
 You may use the --prefix=<install_prefix> option to specify a custom installation directory for CMake. 

boostrap 脚本中,可以看到默认的 cmake 前缀安装位置是从这里开始的。
cmake_default_prefix="/usr/local"

但我不会只选择 bootstrap --prefix=/usr。因为我使用的是 archlinux,我会选择 Archlinux 默认安装所使用的内容,可以从这里了解:

  ./bootstrap --prefix=/usr \
    --mandir=/share/man \
    --docdir=/share/doc/cmake \
    --sphinx-man \
    --system-libs \
    --qt-gui \
    --parallel=$(/usr/bin/getconf _NPROCESSORS_ONLN)

看起来合理。我看到您使用 apt-get 作为软件包管理器,如果这是Debian,则可以从here下载cmake的源代码包,并在那里找到构建命令。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接