YouCompleteMe安装与配置(2)

*.so 文件已生成 ~/llvm-clang/libcxx/lib/libc++.so.1.0,要让 clang 访问必须复 制到 /usr/lib/,并创建软链接

ln -s ~/llvm-clang/libcxx/lib/libc++.so.1.0 ~/llvm-clang/libcxx/lib/libc++.so.1 ln -s ~/llvm-clang/libcxx/lib/libc++.so.1.0 ~/llvm-clang/libcxx/lib/libc++.so cp ~/dllvm-clang/libcxx/lib/libc++.so* /usr/lib/ 类似,源码安装 libc++abi 的头文件和动态链接库: cd ~/llvm-clang/ svn co libcxxabi cd libcxxabi/lib ./buildit

头文件已经生成到 ~/llvm-clang/libcxxabi/include/,要让 clang 找到必须复制到 /usr/include/c++/v1/

cp -r ~/llvm-clang/libcxxabi/include/ /usr/include/c++/v1/

*.so 文件已生成 ~/llvm-clang/libcxx/lib/libc++abi.so.1.0,要让 clang 访问必 须复制到 /usr/lib/,并创建软链接

ln -s ~/llvm-clang/libcxxabi/lib/libc++abi.so.1.0 ~/llvm-clang/libcxxabi/lib/libc++abi.so.1

ln -s ~/llvm-clang/libcxxabi/lib/libc++abi.so.1.0 ~/llvm-clang/libcxxabi/lib/libc++abi.so

cp ~/llvm-clang/libcxxabi/lib/libc++abi.so* /usr/lib/

后续可以通过如下选项进行代码编译:

clang++ -std=c++11 -stdlib=libc++ -Werror -Weverything -Wno-disabled-macro- expansion -Wno-float-equal -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno- global-constructors -Wno-exit-time-destructors -Wno-missing-prototypes -Wno-padded -lc++ -lc++abi main.cpp

参数说明:

-std=c++11: 使用 C++11 新特性;

-stdlib=libc++: 指定使用 clang 的标准库头文件 /usr/include/c++/v1/;

-Werror: 将所有编译警告视为编译错误;

-Weverything: 打开所有编译警告选项。在 GCC 中,无法通过单个选项打开所有 编译警告,必须繁琐的同时指定 -Wall、-Wextra、以及大量分散的其他选项,为此clang 新增了 -Weverything。当然,有些警告意义不大,完全可忽略,如下;

-Wno-disabled-macro-expansion:禁止使用宏表达式,忽略此警告;

-Wno-float-equal:浮点类型不应使用 != 和 == 运算符,忽略此警告;

-Wno-c++98-compat、-Wno-c++98-compat-pedantic:采用 C++11 新特性的代 码无法兼容 C++98,忽略此警告;

-Wno-global-constructors:在 main() 之前存在执行的代码,忽略此警告;

-Wno-exit-time-destructors:在 main() 之后存在执行的代码,忽略此警告;

-Wno-missing-prototypes:虽有函数定义但缺失函数原型,忽略此警告;

-Wno-padded:结构体大小应为 4 字节整数倍,忽略此警告(编译器自动调整对齐 边界);

-lc++:指定链接 /usr/lib/libc++.so 标准库;

-lc++abi:指定链接 /usr/lib/libc++abi.so 标准库。注意:这两个选项非常重 要,缺失将导致链接失败!

这些参数在YouCompleteMe的配置文件.ycm_extra_conf.py的flags中设置

安装配置YouCompleteMe

下载源码。使用vundle搞定,在vimrc文件中加入
Bundle 'Valloric/YouCompleteMe'

执行命令: $ cd ~ $ mkdir ~/ycm_build $ cd ~/ycm_build $ cmake -G "Unix Makefiles" -DUSE_SYSTEM_LIBclang=ON -DEXTERNAL_LIBCLANG_PATH=CLANG_INSTALL_PATH/libclang.so . ~/.vim/bundle/YouCompleteMe/cpp

在YouCompleteMe中生成libclang.so和ycm_core.so文件
执行 make ycm_core,这样将在~/.vim/bundle/YouCompleteMe/python/目录下自动生成两个文件(libclang.so和ycm_core.so)

这还是不够的,还必须执行命令:make ycm_support_libs。 这条命令才会生成第三个文件ycm_client_support.so。因为,YouCompleteMe是C/S架构的,所以存在服务器和服务端的说法。

最后设置.ycm_extra_conf.py文件。

在.vimrc中添加配置: " 自动补全配置 set completeopt=longest,menu "让Vim的补全菜单行为与一般IDE一致(参考VimTip1228) autocmd InsertLeave * if pumvisible() == 0|pclose|endif "离开插入模式后自动关闭预览窗口 inoremap <expr> <CR> pumvisible() ? "\<C-y>" : "\<CR>" "回车即选中当前项 "上下左右键的行为 会显示其他信息 inoremap <expr> <Down> pumvisible() ? "\<C-n>" : "\<Down>" inoremap <expr> <Up> pumvisible() ? "\<C-p>" : "\<Up>" inoremap <expr> <PageDown> pumvisible() ? "\<PageDown>\<C-p>\<C-n>" : "\<PageDown>" inoremap <expr> <PageUp> pumvisible() ? "\<PageUp>\<C-p>\<C-n>" : "\<PageUp>" "youcompleteme 默认tab s-tab 和自动补全冲突 "let g:ycm_key_list_select_completion=['<c-n>'] let g:ycm_key_list_select_completion = ['<Down>'] "let g:ycm_key_list_previous_completion=['<c-p>'] let g:ycm_key_list_previous_completion = ['<Up>'] let g:ycm_confirm_extra_conf=0 "关闭加载.ycm_extra_conf.py提示 let g:ycm_collect_identifiers_from_tags_files=1 " 开启 YCM 基于标签引擎 let g:ycm_min_num_of_chars_for_completion=2 " 从第2个键入字符就开始罗列匹配项 let g:ycm_cache_omnifunc=0 " 禁止缓存匹配项,每次都重新生成匹配项 let g:ycm_seed_identifiers_with_syntax=1 " 语法关键字补全 nnoremap <F5> :YcmForceCompileAndDiagnostics<CR> "force recomile with syntastic "nnoremap <leader>lo :lopen<CR> "open locationlist "nnoremap <leader>lc :lclose<CR> "close locationlist inoremap <leader><leader> <C-x><C-o> "在注释输入中也能补全 let g:ycm_complete_in_comments = 1 "在字符串输入中也能补全 let g:ycm_complete_in_strings = 1 "注释和字符串中的文字也会被收入补全 let g:ycm_collect_identifiers_from_comments_and_strings = 0 nnoremap <leader>jd :YcmCompleter GoToDefinitionElseDeclaration<CR> " 跳转到定义处

linux

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/18309.html