Linux编译安装同一软件的不同版本
开发时遇到这样一个问题:在ArchLinux
的base-devel
软件包中包含最高版本的flex
和flex++
(具体来说是2.6.4
,而且也是2017年的版本了)。但是,我的一个项目需要用到flex 2.5.x
。虽然他们之间只隔了一个小版本,但是我的这个项目使用了一个不兼容的核心特性。这样就产生了一个问题,我没办法降低flex
的版本,因为其存在于base-devel
软件包中,会导致无法预料的后续影响,显而易见的一个问题就是aur
无法使用。所以我迫切的需要一个独立的低版本flex
软件包。
官方库无法直接降低版本,那就只有编译安装咯。编译安装的make install
默认安装到系统的/usr/bin
等目录,所以我们有两个解决方案:
- 手动收集构建产物,放置到对应的位置。或者手动修改构建脚本。
- 指定安装路径。
显而易见的是,指定安装路径是更简单、更稳妥的解决方案。
对于使用autoconf
的构建系统:
1 | ./configure --prefix=/opt/flex |
对于cmake
,使用DCMAKE_INSTALL_PREFIX
变量来修改安装路径:
1 | mkdir build |
如果是cmake-gui
,也可以手动设置DCMAKE_INSTALL_PREFIX
变量。
接下来我们就可以愉快的:
1 | make |