为何执行source命令修改$PATH后CMake版本发生变化?
问题原因分析
这本质是系统查找可执行程序的优先级逻辑导致的:
- 当你在终端输入
cmake这类命令时,系统会按照$PATH环境变量里的路径顺序,从前往后逐个查找名为cmake的可执行文件,找到第一个匹配的就直接使用。 - 你没source那个文件时,新版CMake 3.25所在的路径在
$PATH里的优先级更高(排在旧版3.12路径的前面),所以系统优先找到3.25版本。 - 当你source那个包含
export PATH={some path}的文件后,这个{some path}里应该存放着旧版CMake 3.12的可执行文件,而且这个路径被设置到了$PATH的更靠前的位置(比如用export PATH={some path}:$PATH的写法,把新路径插在原有PATH最前面)。这就导致系统查找cmake时,先找到了旧版3.12的可执行文件,所以版本显示就变了。
你可以用以下命令验证:
- source目标文件后,执行
which cmake,会输出当前调用的cmake的绝对路径,确认是不是旧版3.12的安装路径。 - 分别在source前后执行
echo $PATH,对比两次的输出,就能看到{some path}的位置,以及旧版cmake路径的优先级变化。
内容的提问来源于stack exchange,提问作者Sanjay kumar
相关产品推荐
相关产品推荐

