在Linux CentOS 7上,如何强制系统使用cmake3?

42

我尝试在我的Linux CentOS 7.3上安装PyTorch。我下载了它的软件包,运行了这个命令,但是出现了以下错误:

sudo python setup.py install

running install
running build_deps
CMake Error at CMakeLists.txt:1 (cmake_minimum_required):
  CMake 3.0 or higher is required.  You are running version 2.8.12.2


-- Configuring incomplete, errors occurred!

所以我尝试使用命令安装CMake 3

sudo yum -y install cmake3

安装进行得很好,但系统仍然将cmake2.8作为默认版本。 如果我输入yum info命令,则会显示以下信息:

sudo yum info cmake

Installed Packages
Name        : cmake
Arch        : x86_64
Version     : 2.8.12.2
Release     : 2.el7
Size        : 27 M
Repo        : installed
From repo   : base
Summary     : Cross-platform make system
URL         : http://www.cmake.org
License     : BSD and MIT and zlib
Description : CMake is used to control the software compilation process using simple
            : platform and compiler independent configuration files. CMake generates
            : native makefiles and workspaces that can be used in the compiler
            : environment of your choice. CMake is quite sophisticated: it is possible
            : to support complex environments requiring system configuration, preprocessor
            : generation, code generation, and template instantiation.
所以问题很明显:系统仍将cmake2.8视为默认版本,因此Python在安装PyTorch时不使用cmake3。我该如何解决这个问题?

谢谢

5个回答

67

安装了cmakecmake3软件包后,您可以使用update-alternatives在两个软件包之间切换。

使用alternatives命令注册这两个安装程序:

$ sudo alternatives --install /usr/local/bin/cmake cmake /usr/bin/cmake 10 \
--slave /usr/local/bin/ctest ctest /usr/bin/ctest \
--slave /usr/local/bin/cpack cpack /usr/bin/cpack \
--slave /usr/local/bin/ccmake ccmake /usr/bin/ccmake \
--family cmake

$ sudo alternatives --install /usr/local/bin/cmake cmake /usr/bin/cmake3 20 \
--slave /usr/local/bin/ctest ctest /usr/bin/ctest3 \
--slave /usr/local/bin/cpack cpack /usr/bin/cpack3 \
--slave /usr/local/bin/ccmake ccmake /usr/bin/ccmake3 \
--family cmake

执行这两个命令后,当您在bash提示符中输入cmake或启动bash脚本时,默认情况下将调用cmake3。这些命令还负责注册一些次要命令(如需要与cmake一起切换的ctest)。

如果您需要将默认设置切换回cmake 2.8,请运行以下命令:

$ sudo alternatives --config cmake

There are 2 programs which provide 'cmake'.

  Selection    Command
-----------------------------------------------
   1           cmake (/usr/bin/cmake)
*+ 2           cmake (/usr/bin/cmake3)

Enter to keep the current selection[+], or type selection number: 1

1
它对我不起作用。/usr/local/bin/cmake正在调用cmake3,但我想让/usr/bin/cmake调用cmake3。这可能吗? - klaus
1
你应该确保 /usr/local/bin 在你的路径中更早出现::/usr/local/bin:/usr/bin - tmx

15

在CentOS 7上安装cmake3后,创建这个符号链接对我有效:

sudo ln -s /usr/bin/cmake3 /usr/bin/cmake

8
如果您没有root权限,只需创建一个类似于这样的链接(因为~/bin通常在您的PATH中):
ln -s /usr/bin/cmake3 ~/bin/cmake

在某些规范中,例如libzip.spec,它可以工作:mkdir ~/bin export PATH=~/bin:$PATH ln -s /usr/bin/cmake3 ~/bin/cmake - Sérgio

1
在Centos上,软件包cmake3包含一个名为cmake3的可执行文件。因为大多数程序执行cmake,它们找不到cmake3。
通常情况下,您可以在某个地方创建一个名为cmake的链接,该链接指向/usr/bin/cmake3并将此链接所在的目录放置在PATH变量中的其他目录之前。

谢谢,你怎么在~/.bashrc文件中实现这个? - DavideChicco.it
export PATH=<your-dir>:$PATH 可以运行。但是您通过 sudo 运行 python setup.py install,因此您应该修改根环境,而不是用户环境。如果要使用 cmake3,则最好将变量传递给 sudosudo PATH=<your-dir>:$PATH python setup.py install - Tsyvarev
我刚刚执行了“sudo ln -s /usr/bin/cmake3 /usr/bin/cmake”。 - Waldemar
擅自更改系统文件是个坏主意。当cmake软件包更新时,它将被覆盖。此外,其他需要在/usr/bin/cmake中存在cmake V.2的软件可能不会欣赏这样做。 - aseq

1
在一些规范中,例如libzip.spec,它可以正常工作:

BuildRequires:  cmake3

mkdir ~/bin
export PATH=~/bin:$PATH
ln -s /usr/bin/cmake3 ~/bin/cmake

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