#文章背景:
平时工作过程, 经常使用vim来编写和阅读代码, 这就需要安装一些vim插件. 部分插件只需要下载后, 拷贝.vim目录下面, 在.vimrc做一配置就可以了. 但有些插件则需要依赖于其它组件, 比如常用的cscope, ctags等. 最近, 看到vim的YouCompleteMe比较不错, 就起了念头在工作站安装YouCompleteMe, 简称ycm. 但属于自己的公司工作站上帐户是没有root权限的, 这就需要管理员帮助安装软件(老麻烦管理员也是令人崩溃的事情), 而有些软件则由于版本号过低会导致一些功不能工作, 最后被迫通过直接编译源码的方式来达到自己的目的. 在安装ycm的过程遇到各种依赖, 花费不少的精力, 特以在此做一记录, 方便查阅.
另外, 这篇文章适合于对linux环境比较熟悉的, 有一定开发经验的同学. 没有基础的话, 还是先学习一下基础知识吧.
#系统环境
首先需要明确一下, 工作站的环境, ubuntu 12.04 LTS. gcc 版本为4.6. 在开始之前请确认已经安装build-essential等必要的安装包, 这些应用或者模块会有依赖, 如果遇到问题可以查看相应的帮助文档, 检查是否安装相应的依赖包.
#安装ycm所需要基本条件:
- Vim 7.4.143 with Python 2 or Python 3 support
- 如果需要支持c, c++补齐, 需要clang 4.0的支持.
#安装步骤
支持c, c++补齐的, 需要安装clang4.0. 由于没有root权限, 所需要模块都需要自己下载源代码进行编译, 并安装到HOME目录下面. 在这里所需要的软件包都安装到了~/usr目录下面.
##一, 检查所依赖的软件包
下面这些内容可以直接到llvm.org网站查看
http://llvm.org/docs/GettingStarted.html#requirements
http://clang.llvm.org/get_started.html
- Requirements:
GNU Make 3.79, 3.79.1 Makefile/build processor
GCC >=4.8.0 C/C++ compiler1
python >=2.7 Automated test suite2
zlib >=1.2.3.4 Compression library3
Additionally, your compilation host is expected to have the usual plethora of Unix
utilities. Specifically:
ar — archive library builder
bzip2 — bzip2 command for distribution generation
bunzip2 — bunzip2 command for distribution checking
chmod — change permissions on a file
cat — output concatenation utility
cp — copy files
date — print the current date/time
echo — print to standard output
egrep — extended regular expression search utility
find — find files/dirs in a file system
grep — regular expression search utility
gzip — gzip command for distribution generation
gunzip — gunzip command for distribution checking
install — install directories/files
mkdir — create a directory
mv — move (rename) files
ranlib — symbol table builder for archive libraries
rm — remove (delete) files and directories
sed — stream editor for transforming output
sh — Bourne shell for make build scripts
tar — tape archive for distribution generation
test — test things in file system
unzip — unzip command for distribution checking
zip — zip command for distribution generation- 检查系统是否满足相应的条件
2.1 检查cmake的版本号:
运行命令: cmake --version
应该能看到如下的输出:
cmake version 3.8.0
CMake suite maintained and supported by Kitware (kitware.com/cmake).
2.2 检查gcc的版本号:
运行如下的命令: gcc --version
应该能看到如下的输出:
gcc (GCC) 6.3.0
Copyright © 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
2.3 检查python版本
由于没有root权限, ycm需要安排future包. 而系统中默认的python是没有安装future的,
所以只能下载python源码, 手动编译安装到~/usr/python-2.7目录下面.
##二 安装make软件包
检查make的版本号, 如果不满足; 则从http://ftp.gnu.org/gnu/make/下载对应的源码包, 进行下载编译.
##三 安装gcc
由于系统中默认的gcc的版本为4.6, 我下载了gcc 6.3的软件包, 自行编译安装.
gcc编译依赖gmp, mprf, mpc, isl软件包
- isl编译安装
可以去这里下载isl源码包, gcc 4.9需要isl-0.12, gcc 6.3则需要isl-0.16.
我需要编译的是gcc 6.3, 故下载的是isl-0.16
http://isl.gforge.inria.fr/
解压源代码, 进入到源代码目录, 执行如下的命令:
./configure --prefix=/home/xxx/usr/isl-0.16
make install
- gmp编译安装:
访问https://gmplib.org/下载gmp源代码
解压源代码, 进入到源代码目录, 执行如下的命令:
./configure --prefix=/home/xxx/usr/
make install
- mpfr编译安装:
访问http://www.mpfr.org/下载源代码
解压源代码, 进入到源代码目录, 执行如下的命令:
./configure --prefix=/home/xxx/usr/
make install- mpc编译安装:
访问http://www.multiprecision.org/index.php?prog=mpc&page=download下载源代码
解压源代码, 进入到源代码目录, 执行如下的命令:
./configure --prefix=/home/xxx/usr/
make install
- gcc 6.3 编译安装
访问https://gcc.gnu.org/下载源代码
解压源代码, 进入到源代码目录, 执行如下的命令:
- ./configure --prefix=/home/xxx/usr/gcc-6.3.0 --with-gmp-=/home/xxx/usr --with-mpfr==/home/xxx/usr --with-mpc=/home/xxx/usr
–with-isl=/home/xxx/usr/isl-0.16 LDFLAGS="-static -L/home/xxx/usr/lib -static -L/home/xxx/usr/isl-0.16/lib"
–enable-languages=c,c++,fortran,objc,obj-c++ --enable-shared --enable-linker-build-id --with-system-zlib
–libexecdir=/home/xxx/usr/gcc-6.3.0/lib --without-included-gettext --enable-threads=posix
–with-gxx-include-dir=/home/xxx/usr/include/c++/6.3.0 --libdir=/home/xxx/usr/gcc-6.3.0/lib --enable-nls --with-sysroot=/
–enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-objc-gc --disable-werror
–with-arch-32=i686 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
- make install
- 进入/home/xxx/usr/gcc-6.3.0/bin目录, 执行如下的命令:
ln -s gcc cc
ln -s cl1 /home/xxx/usr/gcc-6.3.0/lib/gcc/x86_64-linux-gnu/6.3.0/cc1
注: xxx 代表是你自己的帐户目录
#四 安装cmake
从https://cmake.org/download/下载cmake源代码包
解压软件包, 进入软件包目录
执行如下的命令:
./bootstrap --prefix=~/usr/
make
make install
安装llvm
访问http://llvm.org/, 下载对应的clang 4.0的代码包
http://releases.llvm.org/download.html#4.0.0
编译命令请参考如下的文档:
http://clang.llvm.org/get_started.html
http://llvm.org/docs/GettingStarted.html#requirements
- 下载并解压llvm4.0源码包
- 下载并解压clang4.0源码包到llvm/tools
- 下载并解压clang tool extra源码包到llvm/tools/clang/tools
- mkdir build_llvm4.0
- cmake -G “Unix Makefiles” …/llvm
- cmake --build .
- cmake -DCMAKE_BUILD_TYPE=Release
-DCMAKE_INSTALL_PREFIX=/home/liuhj7/usr/llvm -P cmake_install.cmake
编译安装python
ycm需要python支持ucs4, 同时需要安装future包, 由于没有root权限, 帮需要下载源码自行编译安装.
从https://www.python.org/downloads/release/python-2713/下载对应的源码包
解压源码后, 进行编译:
- ./configure --prefix=/home/xxx/usr/python-2.7.13-ucs4 --enable-shared --enable-ipv6 --enable-unicode=ucs4 --enable-profiling --enable-optimizations --with-lto LDFLAGS="-Wl,–rpath=/home/xxx/usr/python-2.7.13-ucs4/lib-ucs4,–enable-new-dtags"
- make
- make install
- 下载pip.py到/home/xxx/usr/python-2.7.13-ucs4/bin
- cd /home/xxx/usr/python-2.7.13/bin
./pip.py future
编译vim
访问http://www.vim.org/git.php, 参照说明通过git下载源代码
- 切换到代码目前, 运行git tag查看版本, 执行git co tag_you_want, 切换到你需要的版本.
- make distclean
- ./configure --with-features=huge --enable-cscope --enable-fontset=yes
– enable-pythoninterp=yes --enable-multibyte --enable-xim
–enable-gui=auto --enable-luainterp=yes --enable-pythoninterp=yes
–enable-rubyinterp=yes --enable-perlinterp=yes
–enable-cscope=yes --with-x --with-compiledby=xxx:yyyy-mm-dd
–with-python-config-dir=/home/xxx/usr/python-2.7.13-ucs4/lib/python2.7/config/
–disable-selinux --prefix=/home/xxx/usr/vim80- make
- make install
编译ycm
从这里通过git下载代码:
https://github.com/Valloric/YouCompleteMe
- mkdir build_ycm
- cd build_ycm
cmake -G “Unix Makefiles” -DPATH_TO_LLVM_ROOT=~/usr/llvm-4.0
-DPYTHON_EXECUTABLE:FILEPATH=/home/liuhj7/usr/python-2.7.13-ucs4
. ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp- cmake --build . --target ycm_core
- 编译完成之后, 修改.vimrc文件; 配置ycm. 可以参考:
http://valloric.github.io/YouCompleteMe/
注意
需要把生成的lib库添加到库搜索目录里面, 通过修改.bashrc即可.同时把需要用到的程序添加到path环境变量中, 请参考:
if [ “$PATH” == “” ]; then
export PATH=$MY_PATH
else
if [ expr match "$PATH" "$MY_PATH"
-eq 0 ]; then
export PATH=$MY_PATH:$PATH
fi
fi
MY_LD_LIBRARY_PATH=/home/xxx/usr/python-2.7.13-ucs4/lib:/home/xxx/usr/lib:/home/xxx/usr/isl-0.12/lib:/home/xxx/usr/isl-0.16/lib
if [ “$LD_LIBRARY_PATH” == “” ]; then
export LD_LIBRARY_PATH=$MY_LD_LIBRARY_PATH
else
if [ expr match "$LD_LIBRARY_PATH" "$MY_LD_LIBRARY_PATH"
-eq 0 ]; then
export LD_LIBRARY_PATH=$MY_LD_LIBRARY_PATH:$LD_LIBRARY_PATH
fi
fi
这个过程是在完成之后整理出来的, 可能会有错误. 有问题可以告诉我. 希望这篇文档对想折腾ycm的人有帮助, 谢谢.