有时候编译不同的软件可能需要不同的cmake版本,由于编译一般都是用脚本编译,并不是直接cmake xxx,所以切换cmake有点不方便。
想要切换cmake版本且切换后版本信息能够传递给任意的脚本中(即环境变量传递到任意脚本中),可以这么做:
-
首先下载两个版本的cmake了,放到一个非环境变量目录里,比如我放在了
/opt/cmake/xxxx
里面; -
然后编写一个脚本文件,比如命名为
cmake_change
:#!/bin/bash keys="/opt/cmake/cmake-" cmake1='/opt/cmake/cmake-3.5.1-Linux-x86_64/bin/' #刚才下载的cmake版本之一 cmake2='/opt/cmake/cmake-3.22.3-linux-x86_64/bin/' #刚才下载的cmake版本之一 cmake_version="$1" OLD_IFS="$IFS" # 保存系统默认的分隔符 IFS=":" # 将分隔符设置为冒号,为了下面取出环境变量里面每个路径 path_array=($PATH) # 将环境变量变成数组,以上面设置的冒号分隔符为界限 IFS="$OLD_IFS" # 恢复默认的系统分隔符 export PATH="" # 清空当前shell的环境变量 for p in ${path_array[@]} do if [[ $p =~ $keys ]] then continue # 如果旧的环境变量里面还有了某个cmake版本,则直接跳过,先不加入环境变量 fi export PATH=${PATH}:${p} # 将之前的环境变量的路径挨个加入现在的环境变量里面 done if [[ $cmake1 =~ $cmake_version ]] # 将脚本传入的指定版本的cmake路径加入新的环境变量里面 then export PATH=${PATH}:${cmake1} else export PATH=${PATH}:${cmake2} fi echo "change cmake version to ${cmake_version}"
上面的脚本意思就是将当前shell中原有的cmake环境变量路径去除,然后加入指定的cmake版本的路径到环境变量里面。
-
为了能够使新的环境变量生效(对当前shell以及脚本生效),最后一步,在
~/.bashrc
中加入下述两行:alias cmake1='source cmake_change 3.5.1' alias cmake2='source cmake_change 3.22.3'
退出后执行:
. ~/.bashrc
现在,想要切换哪个版本的cmake,只需要执行cmake1或者cmake2就能自动切换到那个版本,且cmake版本会自动进入当前shell中执行的脚本环境中。