YCM的编译
====
第零步,
$ git submodule update --init --recursive
现在回想起来不是必须,跟下面的编译无关,可以略过。
按文档步骤,第一步:
$ cp -rf YouCompleteMe ~/.vim/bundle/
第二步:
由于服务器的python不支持动态库,我自己编了个。并且和gcc,llvm都安装在~/tools下面。
DPATH_TO_LLVM_ROOT 下面应当有llvm的bin include lib 等。
$ cd ~/.vim/bundle && mkdir ycm_build && cd ycm_build
$ CFLAGS='-fPIC' CPPFLAGS='-fPIC' CXXFLAGS='-fPIC' LDFLAGS='-Wl,-rpath=$HOME/tools/lib64'\
cmake -G "Unix Makefiles" \
-DPATH_TO_LLVM_ROOT=~/tools . ../YouCompleteMe/cpp
检查生成CMakeCache.txt 中的python等路径,如果是/usr/local 需要换成你当前的。
因为即使传递了-DPYTHON_LIBRARY=xxx, 最后也会用local下面的,导致编不过:
/usr/local/lib/libpython2.7.a(abstract.o): relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object;
需要检查
PYTHON_INCLUDE_DIR
PYTHON_LIBRARY
DCMAKE_EXE_LINKER_FLAGS
CMAKE_LINKER
第三步,一切就绪,编译:
$ make -j8
如果顺利的话,所有生成的*.so都已经在YouCompleteMe目录下。
第四步:
vim ~/.bashrc
export LD_LIBRARY_PATH=$HOME/tools/lib64:$HOME/tools/lib
这个会影响ldd, 很重要,我在上面死磕了好久才知道的。
配置.vimrc
let g:syntastic_error_symbol = 'X'
let g:syntastic_warning_symbol = '!'
let g:ycm_global_ycm_extra_conf = '~/.vim/bundle/YouCompleteMe/.ycm_extra_conf.py'
let g:ycm_collect_identifiers_from_tags_files = 1
let g:ycm_seed_identifiers_with_syntax = 1
let g:ycm_confirm_extra_conf = 0
nnoremap <leader>gg :YcmCompleter GoToDefinitionElseDeclaration<CR>
nmap <F5> :YcmDiags<CR>
"default "let g:ycm_key_detailed_diagnostics = '<leader>d'
优先用当前目录下的.ycm_extra_conf.py,那个.vim 下面的只是备胎。
后记
====
neocomplete clang_complete 引导了YCM出世,他们可以光荣退休了,因为对YCM底部status 提示有干扰。
YCM除开.git目录干重85MB,虽然是大了些,但是精确调整到声明,像eclipse那样实时错误错误检测,快速补全,足够对得起它的体积。