前言
即将毕业入职,之前实习时的开发机是CentOS 6.10,因此这里vim开发环境的搭建是基于CentOS 6.10的。
相比更流行的Ubuntu系统,CentOS的毛病实在太多了,折腾起来累死人。另一方面,由于公司开发机并不能像个人电脑一样随心所欲,所以像高版本的vim、gcc等,都是安装到自己的HOME目录,因此绝大多数软件需要手动下载源码、编译、安装到HOME目录。
问题来了,为什么要升级高版本?
- CentOS 6.10的源默认软件太老了,比如gcc版本才4.4.7,连C++11都不支持;
- 像YouCompleteMe(YCM)这种优秀的插件,需要各种高版本软件。
为了节约篇幅,后文的下载、解压的命令都省略了,比如下载基本就是找到官网下载链接,然后wget
命令下载下来,对于github上的项目,直接git clone
。有时候比较慢,我会在租的VPS上下载好,然后打包传回来。
使用tar
解压,对.tar.gz
后缀的用zxvf
选项来解压,对.tar.bz
后缀的用jxvf
选项解压,对.tar
或.tar.xz
后缀的用xvf
选项解压。其中v
选项不是必要的,只是查看解压了什么内容。
本人在折腾的过程中踩了很多坑,遇到很多错误,借助Google解决了大量问题,后文中不会对这些问题进行描述,而是直接讲述最终尝试后可行的方案。所有尝试均在VMware中新安装的CentOS 6.10系统上进行,系统来源于CentOS镜像站的bin-DVD1版本。
所有的软件均安装在$HOME/local
下,我将其设为了环境变量LOCAL
,通过在~/.bashrc
中加上如下内容:
1 | export LOCAL=$HOME/local |
1. 升级gcc
这里选用了我一直用的gcc版本,也是Ubuntu 16.04默认安装的最新版本:5.4。其实只需要4.8就够了,即完整支持C++11的功能。
在CentOS下需要安装交叉编译IDE依赖,参考gcc installation error,我新安装的系统没有g++,因此还需要安装gcc-c++
。
1 | sudo yum install -y glibc-devel.i686 libgcc.i686 gcc-c++ |
去官网给出的镜像列表中找到中国的地址,比如ustc镜像,下载gcc源码并解压,然后进入gcc源码目录,执行以下命令编译:
1 | ./contrib/download_prerequisites |
这里说明下,make
选项是-j4
是采用4个进程编译,因为我的个人电脑是4核。上述命令的逻辑就是新建build
目录,然后configure
、make
、make install
三步走的套路,通过--prefix
选项指定install
的目录。
修改~/.bashrc
文件,设置环境变量来使本地的文件优先于全局的同名文件被选择:
1 | export GCC_DIR=$LOCAL/gcc-5.4.0 |
比如在我的电脑上这么配置后,gcc
命令默认就是~/local/gcc-5.4.0/bin/gcc
而非/usr/bin/gcc
了。
2. 升级某些软件
有了高版本的gcc后便可从源码中直接编译安装高版本的软件了。本节升级的软件版本均已够用,如果需要更高版本的,可以选择下载更高版本的源码进行编译。
2.1 安装Python 2.7.16
去官网下载源码解压,进入目录。首先安装依赖项,然后编译、安装(其中test_weakref
耗时比较久):
1 | sudo yum install -y zlib zlib-devel openssl* bzip2* |
在~/.bashrc
文件中添加环境变量:
1 | export PY2_DIR=$LOCAL/python2.7.16 |
2.2 安装cmake 3.14.5
去官网下载源码解压,进入目录。直接编译、安装:
1 | ./configure --prefix=$LOCAL/cmake-3.14.5 |
这里的是gmake
而非make
,但在Linux上gmake
只是指向make
的符号链接,代表GNU Make。
在~/.bashrc
文件中添加环境变量:
1 | export CMAKE_DIR=$LOCAL/cmake-3.14.5 |
2.3 安装vim 8.1
去github上克隆vim源码,进入目录,首先安装依赖项,然后编译安装:
1 | sudo yum -y groupinstall 'Development Tools' |
在~/.bashrc
文件中添加环境变量:
1 | export VIMPATH=$HOME/local/vim |
2.4 安装clang 8.0
去LLVM下载页分别下载llvm、clang、clang-tools-extra、compiler-rt源码按照以下命令解压、重命名:
1 | wget http://releases.llvm.org/8.0.0/llvm-8.0.0.src.tar.xz |
最终层次结构为:
1 | llvm |
其中clang目录为重命名后的cfe目录,extra目录为重命名后的clang-tools-extra目录,并且都去掉了后缀版本号。
然后进入llvm目录,执行下列编译操作,注意cmake识别的gcc路径仍然是系统路径,因此需要手动指定CC和CXX路径
1 | mkdir build |
这里多线程编译可能会有问题,我用-j4
编译到68%的ASTImporter
时cc1plus
直接崩了,报错如下:
1 | [ 68%] Building CXX object tools/clang/lib/AST/CMakeFiles/clangAST.dir/ASTImporter.cpp.o |
在.bashrc文件中添加环境变量
1 | export CLANG_DIR=$LOCAL/clang8.0 |
3. 安装vim-plug管理插件
1 | curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ |
之后编辑~/.vimrc
便可添加管理的插件,其格式如下:
1 | " vim插件下载目录 |
vim命令模式下:PlugInstall
从github网址中克隆安装所有插件,:PlugClean
卸载注释掉的插件列表。安装的插件会位于目录~/.vim/plugged
下,如果要使用代理,可以手动克隆到该路径。
4. 插件无关的vimrc配置
将下列代码添加在~/.vimrc
中:
1 | " 定义<leader>为分号,此行代码必须在插件配置代码之前 |
5. 总结
本篇博客主要完成了gcc、python、cmake、vim、clang的升级/安装,均采取了直接编译源码的方式,而像gcc和clang的源码编译非常耗时,python的源码编译虽然较快,但是test_weakref脚本的执行非常慢。
编译源码的方式较为简单,但有些依赖项必须安装,否则找解决方法非常麻烦。
最后安装了vim-plug作为插件管理器,并给出了插件无关的部分vimrc脚本。下一章节将着重介绍我个人常用的插件。