不干扰系统版本的前提下,本地构建CMake的正确方法是什么?
问题背景
现在不少软件(我在3D类软件中发现这个趋势)强制要求使用最新版本的库或工具,导致它们和不算老旧的发行版也无法兼容,比如:
- 一些近期推出的付费树脂打印切片器,和我的2019版Linux Mint不兼容,原因是它们用了更新版本的glibc编译;
- 我没法编译最新版OpenSCAD,因为它要求更高版本的CMake。
针对CMake的情况,我本来想本地构建更新版的CMake,但没找到像Python里make alt-install那样的make目标(Python里make alt-install会把程序装到/usr/local/bin而非/usr/bin,避免破坏系统),请问该怎么正确操作?
解决方案:本地安装新版CMake不覆盖系统版本
CMake本身没有alt-install目标,但可以通过指定安装前缀的方式,实现类似的隔离安装效果,具体步骤如下:
方法一:源码编译安装
下载并解压CMake源码
获取对应版本的CMake源码包,解压后进入源码目录:tar -zxvf cmake-x.x.x.tar.gz cd cmake-x.x.x配置构建参数,指定安装路径
使用bootstrap脚本指定安装到/usr/local(这是自定义软件的默认安装路径,不会覆盖系统/usr/bin下的CMake):./bootstrap --prefix=/usr/local要是想完全隔离到用户目录(不影响系统全局),可以改成:
./bootstrap --prefix=$HOME/local/cmake编译并安装
编译时用多核心加速,然后安装:make -j$(nproc) sudo make install(如果安装到用户目录,不需要
sudo)调整环境变量优先级
检查/usr/local/bin是否在PATH中优先级高于/usr/bin:执行echo $PATH,如果/usr/local/bin在前面,直接输入cmake --version就能看到新版;如果不是,临时生效可以执行:export PATH=/usr/local/bin:$PATH要永久生效,编辑
~/.bashrc或~/.zshrc(根据你用的shell),添加上面的export命令,再执行source ~/.bashrc(对应配置文件)即可。
方法二:使用预编译二进制包
直接下载对应系统的CMake预编译压缩包,解压后放到/usr/local或用户目录,同样调整PATH环境变量即可,比源码编译更省时。
方法三:容器隔离编译
如果不想在主机上修改依赖环境,可以用Docker这类容器工具,在容器内搭建符合OpenSCAD要求的编译环境,编译完成后把生成的二进制文件复制到主机使用,完全隔离系统原有环境。
内容的提问来源于stack exchange,提问作者Camion

