CMake 安装及使用
CMake 是个一个开源的跨平台自动化建构系统,用来管理软件建置的程序,并不依赖于某特定编译器,并可支持多层目录、多个应用程序与多个函式库。 它用配置文件控制建构过程的方式和 Unix 的 make 相似,只是 CMake 的配置文件取名为 CMakeLists.txt。
本教程将介绍如何在 SonmiHPC 上安装并使用 CMake,CMake 安装主要有以下的4种方式:
- 使用 YUM/DNF 包管理器安装;
- 使用 conda 进行安装;
- 直接下载官方编译好的二进制可执行文件;
- 从源码进行编译安装。
本教程将分别介绍前3种安装方式。
1. 使用 YUM/DNF 包管理器安装
该安装方法是最简单的一种方式,不过需要集群的超级用户权限,并且只能安装特定的版本。执行下面的命令就可以安装完成:
shell
dnf install -y cmake
dnf install -y cmake
2. 使用 conda 进行安装
在集群上如果已经安装了 conda 的基础上,先创建或者激活一个现有的虚拟环境:
shell
conda create -n cmake
conda activate cmake
conda create -n cmake
conda activate cmake
然后执行下面命令进行安装:
shell
conda install anaconda::cmake
conda install anaconda::cmake
如果需要指定版本则添加对应的版本号即可,比如要安装 3.9.4 版本的:
shell
conda install anaconda::cmake=3.9.4
conda install anaconda::cmake=3.9.4
3. 直接下载官方编译的二进制可执行文件
也可以直接从官方下载编译好的二进制可执行文件。先使用 wget 下载压缩包到用户目录下:
shell
wget https://github.com/Kitware/CMake/releases/download/v3.30.0/cmake-3.30.0-linux-x86_64.tar.gz
wget https://github.com/Kitware/CMake/releases/download/v3.30.0/cmake-3.30.0-linux-x86_64.tar.gz
然后进行解压缩:
shell
tar xzvf cmake-3.30.0-linux-x86_64.tar.gz
tar xzvf cmake-3.30.0-linux-x86_64.tar.gz
为方便集群上其他用户使用,创建一个文件夹,并将解压出来的内容复制到文件夹中:
shell
mkdir -p /share/apps/cmake/3.30.0
cp -r cmake-3.30.0-linux-x86_64/. /share/apps/cmake/3.30.0
chmod -R 755 /share/apps/cmake
mkdir -p /share/apps/cmake/3.30.0
cp -r cmake-3.30.0-linux-x86_64/. /share/apps/cmake/3.30.0
chmod -R 755 /share/apps/cmake
为方便使用,把 CMake 以 Module 模块加载的方式提供给集群内其他用户,新建如下的路径:
shell
mkdir -p /share/apps/modulefiles/cmake/
mkdir -p /share/apps/modulefiles/cmake/
在该路径下新建一个 Modulefile 文件:
shell
cd /share/apps/modulefiles/cmake/ && vim 3.30.0
cd /share/apps/modulefiles/cmake/ && vim 3.30.0
文件内容如下:
tcl
#%Module###########################################
set modulefilename "CMake"
set modulefilever "3.30.0"
set min_tcl_ver 8.4
if { $tcl_version < $min_tcl_ver } {
puts stderr " "
puts stderr "ERROR: This modulefile requires tcl $min_tcl_ver or greater."
puts stderr "Your system reports that tclsh version $tcl_version is installed."
exit 1
}
if { [ module-info mode load ] } {
puts stderr "Loading $modulefilename version $modulefilever"
}
if { [ module-info mode ] == "unload" || [ module-info mode ] == "remove" } {
puts stderr "Removing $modulefilename version $modulefilever"
puts stderr "Use to view any remaining dependent modules."
}
setenv CMAKE_ROOT /share/apps/cmake/3.30.0
prepend-path PATH /share/apps/cmake/3.30.0/bin
prepend-path MANPATH /share/apps/cmake/3.30.0/man
#%Module###########################################
set modulefilename "CMake"
set modulefilever "3.30.0"
set min_tcl_ver 8.4
if { $tcl_version < $min_tcl_ver } {
puts stderr " "
puts stderr "ERROR: This modulefile requires tcl $min_tcl_ver or greater."
puts stderr "Your system reports that tclsh version $tcl_version is installed."
exit 1
}
if { [ module-info mode load ] } {
puts stderr "Loading $modulefilename version $modulefilever"
}
if { [ module-info mode ] == "unload" || [ module-info mode ] == "remove" } {
puts stderr "Removing $modulefilename version $modulefilever"
puts stderr "Use to view any remaining dependent modules."
}
setenv CMAKE_ROOT /share/apps/cmake/3.30.0
prepend-path PATH /share/apps/cmake/3.30.0/bin
prepend-path MANPATH /share/apps/cmake/3.30.0/man
保存文件后设置一下权限:
shell
chmod -R 755 /share/apps/modulefiles
chmod -R 755 /share/apps/modulefiles
集群上用户可以使用如下的命令来加载 CMake 模块:
shell
module load cmake/3.30.0
module load cmake/3.30.0