Linux编译安装同一软件的不同版本

开发时遇到这样一个问题:在ArchLinuxbase-devel软件包中包含最高版本的flexflex++(具体来说是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
2
3
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=/opt/flex ..

如果是cmake-gui,也可以手动设置DCMAKE_INSTALL_PREFIX变量。

接下来我们就可以愉快的:

1
2
make
sudo make install