當前位置:首頁 » 編程軟體 » ycm編譯失敗

ycm編譯失敗

發布時間: 2022-02-25 09:16:26

⑴ youcompleteme ctags/cscope 哪個好

YouCompleteMe的特別之處
基於語義補全
總所周知,Vim是一款文本編輯器。也就是說,其最基礎的工作就是編輯文本,而不管該文本的內容是什麼。在Vim被程序員所使用後,其慢慢的被肩負了與IDE一樣的工作,文本自動補全(ie.acp,omnicppcompleter),代碼檢查(Syntastic)等等工作。
針對文本自動補全這個功能來說,主要有兩種實現方式。
基於文本
我們常用的omnicppcompleter,acp,vim自帶的c-x, c-n的實現方式就是基於文本。更通俗的說法,其實就是一個字:

其通過文本進行一些正則表達式的匹配,再根據生成的tags(利用ctags生成)來實現自動補全的效果。
基於語義
顧名思義,其是通過分析源文件,經過語法分析以後進行補全。由於對源文件進行分析,基於語義的補全可以做到很精確。但是這顯然是vim所不可能支持的。而且經過這么多年發展,由於語法分析有很高的難度,也一直沒有合適的工具出現。直到,由apple支持的clang/llvm橫空出世。YouCompleteMe也正是在clang/llvm的基礎上進行構建的。
整合實現了多種插件
clang_complete
AutoComplPop
Supertab
neocomplcache
Syntastic(類似功能,僅僅針對c/c++/obj-c代碼)
支持語言
c
c++
obj-c
c#
python
對於其他的語言,會調用vim設置的omnifunc來匹配,因此同樣支持php,ruby等語言。
已知的有 * javascript —-tern_for_vim * ruby/java —-eclim
使用效果圖

使用感受
和IDE一樣,自動補全,
根據include的文件進行補全
不用再蹩腳的生成tags
補全非常精準,而且速度很快,不會有延遲(以前在大項目上,acp用起來實在是很卡)
支持類似tags的跳轉,跳到定義處以及使用處
出錯提示很智能,並且用起來真的是如絲般柔滑,不用輸入:w進行強制檢測
安裝
說完了那麼多好處,就要說到安裝了。不同於以往其他vim插件,YCM是一款編譯型的插件。在下載完後,需要手動編譯後才能使用。對應其他的插件來說,僅僅就是把.vim的文件丟到相應文件夾下就可以。而這也加大了使用YCM的難度。
安裝准備
最新版的Vim(7.3.584+),編譯時添加+python標志(已經安裝的可以通過vim --version查看)
cmake(mac可以通過homebrew安裝,brew install cmake,ubuntu可以通過sudo apt-get install cmake)
安裝vundle插件,用於安裝管理vim的插件
mac下快速安裝
在.vimrc中添加下列代碼
Bundle 'Valloric/YouCompleteMe'

保存退出後打開vim,在正常模式下輸入
:BundleInstall

等待vundle將YouCompleteMe安裝完成
而後進行編譯安裝:
cd ~/.vim/bundle/YouCompleteMe
./install --clang-completer

如果不需要c-family的補全,可以去掉--clang-completer。如果需要c#的補全,請加上--omnisharp-completer。
正常來說,YCM會去下載clang的包,如果已經有,也可以用系統--system-libclang。
就這樣,安裝結束。打開vim,如果沒有提示YCM未編譯,則說明安裝已經成功了。
手動編譯安裝
安裝的腳本並不是什麼時候都好用,至少對我來說是這樣的。安裝完之後出現了問題,參考issue#809。
在用:BundleInstall安裝完成或者使用
git clone --recursive https://github.com/Valloric/YouCompleteMe.git

獲取最新的倉庫,而後使用git submole update --init --recursive確認倉庫的完整性後,開始安裝流程。
下載最新的clang二進制文件 YCM要求clang版本 > 3.2,一般來說都是下載最新的。
安裝python-dev.(ubuntu下使用sudo apt-get install python-dev,mac下默認提供,否則請安裝command line tools)
編譯
cd ~
mkdir ycm_build
cd ycm_build
cmake -G 「Unix Makefiles」 -DPATH_TO_LLVM_ROOT=~/ycm_temp/llvm_root_dir . ~/.vim/bundle/YouCompleteMe/cpp make ycm_support_libs

這里需要注意的是,~/ycm_temp/llvm_root_dir中包含的是根據第一步下載的壓縮解壓出來的內容(包括include, bin等等文件)。
這樣就完成了,開始感受YCM提供的完全不遜色於大型IDE所提供的自動補全功能吧。
配置
不同於很多vim插件,YCM首先需要編譯,另外還需要有配置。在vim啟動後,YCM會找尋當前路徑以及上層路徑的.ycm_extra_conf.py.在~/.vim/bundle/YouCompleteMe/cpp/ycm/.ycm_extra_conf.py中提供了默認的模板。也可以參考我的(就在模板上改改而已)。不過這個解決了標准庫提示找不到的問題。
一般來說,我會在~目錄下放一個默認的模板,而後再根據不同的項目在當前目錄下再拷貝個.ycm_extra_conf.py。
# This file is NOT licensed under the GPLv3, which is the license for the rest
# of YouCompleteMe.
#
# Here's the license text for this file:
#
# This is free and unencumbered software released into the public domain.
#
# Anyone is free to , modify, publish, use, compile, sell, or
# distribute this software, either in source code form or as a compiled
# binary, for any purpose, commercial or non-commercial, and by any
# means.
#
# In jurisdictions that recognize right laws, the author or authors
# of this software dedicate any and all right interest in the
# software to the public domain. We make this dedication for the benefit
# of the public at large and to the detriment of our heirs and
# successors. We intend this dedication to be an overt act of
# relinquishment in perpetuity of all present and future rights to this
# software under right law.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
# IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
# OTHER DEALINGS IN THE SOFTWARE.
#
# For more information, please refer to <http://unlicense.org/>

import os
import ycm_core

# These are the compilation flags that will be used in case there's no
# compilation database set (by default, one is not set).
# CHANGE THIS LIST OF FLAGS. YES, THIS IS THE DROID YOU HAVE BEEN LOOKING FOR.
flags = [
'-Wall',
'-Wextra',
#'-Werror',
#'-Wc++98-compat',
'-Wno-long-long',
'-Wno-variadic-macros',
'-fexceptions',
'-stdlib=libc++',
# THIS IS IMPORTANT! Without a "-std=<something>" flag, clang won't know which
# language to use when compiling headers. So it will guess. Badly. So C++
# headers will be compiled as C headers. You don't want that so ALWAYS specify
# a "-std=<something>".
# For a C project, you would set this to something like 'c99' instead of
# 'c++11'.
'-std=c++11',
# ...and the same thing goes for the magic -x option which specifies the
# language that the files to be compiled are written in. This is mostly
# relevant for c++ headers.
# For a C project, you would set this to 'c' instead of 'c++'.
'-x',
'c++',
'-I',
'.',
'-isystem',
'/usr/include',
'-isystem',
'/usr/local/include',
'-isystem',
'/Library/Developer/CommandLineTools/usr/include',
'-isystem',
'/Library/Developer/CommandLineTools/usr/bin/../lib/c++/v1',
]

# Set this to the absolute path to the folder (NOT the file!) containing the
# compile_commands.json file to use that instead of 'flags'. See here for
# more details: http://clang.llvm.org/docs/JSONCompilationDatabase.html
#
# Most projects will NOT need to set this to anything; you can just change the
# 'flags' list of compilation flags. Notice that YCM itself uses that approach.
compilation_database_folder = ''

if os.path.exists( compilation_database_folder ):
database = ycm_core.CompilationDatabase( compilation_database_folder )
else:
database = None

SOURCE_EXTENSIONS = [ '.cpp', '.cxx', '.cc', '.c', '.m', '.mm' ]

def DirectoryOfThisScript():
return os.path.dirname( os.path.abspath( __file__ ) )

def ( flags, working_directory ):
if not working_directory:
return list( flags )
new_flags = []
make_next_absolute = False
path_flags = [ '-isystem', '-I', '-iquote', '--sysroot=' ]
for flag in flags:
new_flag = flag

if make_next_absolute:
make_next_absolute = False
if not flag.startswith( '/' ):
new_flag = os.path.join( working_directory, flag )

for path_flag in path_flags:
if flag == path_flag:
make_next_absolute = True
break

if flag.startswith( path_flag ):
path = flag[ len( path_flag ): ]
new_flag = path_flag + os.path.join( working_directory, path )
break

if new_flag:
new_flags.append( new_flag )
return new_flags

def IsHeaderFile( filename ):
extension = os.path.splitext( filename )[ 1 ]
return extension in [ '.h', '.hxx', '.hpp', '.hh' ]

def GetCompilationInfoForFile( filename ):
# The compilation_commands.json file generated by CMake does not have entries
# for header files. So we do our best by asking the db for flags for a
# corresponding source file, if any. If one exists, the flags for that file
# should be good enough.
if IsHeaderFile( filename ):
basename = os.path.splitext( filename )[ 0 ]
for extension in SOURCE_EXTENSIONS:
replacement_file = basename + extension
if os.path.exists( replacement_file ):
compilation_info = database.GetCompilationInfoForFile(
replacement_file )
if compilation_info.compiler_flags_:
return compilation_info
return None
return database.GetCompilationInfoForFile( filename )

def FlagsForFile( filename, **kwargs ):
if database:
# Bear in mind that compilation_info.compiler_flags_ does NOT return a
# python list, but a "list-like" StringVec object
compilation_info = GetCompilationInfoForFile( filename )
if not compilation_info:
return None

final_flags = (
compilation_info.compiler_flags_,
compilation_info.compiler_working_dir_ )

# NOTE: This is just for YouCompleteMe; it's highly likely that your project
# does NOT need to remove the stdlib flag. DO NOT USE THIS IN YOUR
# ycm_extra_conf IF YOU'RE NOT 100% SURE YOU NEED IT.
#try:
# final_flags.remove( '-stdlib=libc++' )
#except ValueError:
# pass
else:
relative_to = DirectoryOfThisScript()
final_flags = ( flags, relative_to )

return {
'flags': final_flags,
'do_cache': True
}

YouCompleteMe提供的其他功能
YCM除了提供了基本的補全功能,自動提示錯誤的功能外,還提供了類似tags的功能:
跳轉到定義GoToDefinition
跳轉到聲明GoToDeclaration
以及兩者的合體GoToDefinitionElseDeclaration
可以在.vimrc中配置相應的快捷鍵。

nnoremap <leader>gl :YcmCompleter GoToDeclaration<CR>

nnoremap <leader>gf :YcmCompleter GoToDefinition<CR>
nnoremap <leader>gg :YcmCompleter GoToDefinitionElseDeclaration<CR>

另外,YCM也提供了豐富的配置選項,同樣在.vimrc中配置。具體請參考

let g:ycm_error_symbol = '>>'

let g:ycm_warning_symbol = '>*'

同時,YCM可以打開location-list來顯示警告和錯誤的信息:YcmDiags。個人關於ycm的配置如下:
" for ycm
let g:ycm_error_symbol = '>>'
let g:ycm_warning_symbol = '>*'
nnoremap <leader>gl :YcmCompleter GoToDeclaration<CR>
nnoremap <leader>gf :YcmCompleter GoToDefinition<CR>
nnoremap <leader>gg :YcmCompleter GoToDefinitionElseDeclaration<CR>
nmap <F4> :YcmDiags<CR>

YCM提供的跳躍功能採用了vim的jumplist,往前跳和往後跳的快捷鍵為Ctrl+O以及Ctrl+I。
總結
YouCompleteMe是我用過的最爽的一個自動補全的插件了。之前使用acp時,遇到大文件基本上就卡死了,以至於都不怎麼敢使用。由於YCM使用的時C/S結構,部分使用vim腳本編寫,部分認為原生代碼,使得跑起來速度飛快。

⑵ 如何在Windows下給Vim安裝YouCompleteMe

安裝YCM有幾個基本的要求:

包含Python支持的Vim版本。
LLVM/Clang,具體地說其實是libclang.dll這一個文件。
Haroogan預編譯好的YCM庫,主要是指ycm_core.pyd這個文件。
檢查Vim的Python支持的辦法是在cmd中運行python --version看看出來的Python前面是否有加號,或者在Vim中執行:echo has('python')。不過相信會看這篇文章的多半是從官網下的gvim74,很不幸地這個版本並不支持Python。

不過Haroogan同學很貼心地給出了全套解決方案,上面的三個基本要求他都提供了預編譯好的版本:

帶Python和其它一大票語言支持的Vim
LLVM for Windows
YCM
需要提醒的是,不知道什麼原因,上面的bitbucket.org網站中正文里的鏈接都掛了,不過還好下載鏈接可以在左側的Downloads里找到。

⑶ YouCompleteMe配置環境失敗,無法分配內存,ClangHelpers.cpp.o出錯分析說明原因

install好歹加個sudo,沒root許可權怎麼安裝東西啊= =

⑷ youcompleteme編譯好的clang文件放在哪個文件夾

來自 FreeBSD 郵件列表的消息稱:clang 已經成為了 x86 版本 FreeBSD 的默認編譯器,目前可能還會有一個 ABI 問題,但詳細大多數用戶可以非常平滑的過渡。Clang 是一個 C++ 編寫、基於 LLVM、

⑸ Ubuntu14.04麒麟怎麼安裝vim

所有的安裝步驟在Vundle,以及YouCompleteMe兩個地址上面已經說的很透徹了,但是因為第一次安裝,您可能沒有太多經驗,看到這么多需要安裝的工具感到頭大。下面我們一步一步來操作,我相信按照下面的操作,您一定能夠順利的完成代碼補全功能。

首先,您要保證您的vim版本號要高於7.3.584,您可以通過在終端輸入:

vim --version
來查看您的vim的版本號。如果沒有vim,您需要自己安裝。

第二步,安裝cmake

sudo apt-get install build-essential cmake
第三步,安裝 llvm 和 clang

到 www.llvm.org 下載相應版本的llvm和clang,因為我用的是ubuntu 14.04 64bit的系統所以我直接下載的pre-build binary版本的而不需要下載源碼再自己重新編譯了。省去了不少麻煩。

下載完成後,直接將下載後的壓縮文件解壓,並進入其目錄

tar zxvf clang+llvm-3.7.0-amd64-Ubuntu-14.04..tar.gz
cd clang+llvm-3.7.0-amd64-Ubuntu-14.04.
其中 *.tar.gz就是您所下載的壓縮文件。

運行命令:

sudo cp -R * /usr/
將目錄里的所有文件拷貝到相應的系統目錄下,然後再配置一下軟鏈接:

sudo ln -sf /usr/bin/clang++ /etc/alternatives/c++
其中 「-sf」中 「s」代表了軟鏈接,「f」即為force的意思。

運行:clang --version 如果您看到了它的版本號,就說明 llvm 和 clang配置好了。

第四步:安裝Vundle,安裝過程請參考 https://github.com/VundleVim/Vundle.vim#about ;P.S. :如果您是第一次安裝vim,可能需要自己創建vim的配置文件,它是在 「~/ 」 目錄下的的一個隱藏文件 .vim 前面的「小點」就說明這是一個隱藏的目錄, 用 ls -a才能查看,如果沒有,請創建該目錄。即:mkdir ~/.vim

配置好Vundle , 請打開主目錄下的.vimrc文件,這個文件是按照之前安裝vundle時的步驟配置好的,請在call vundle#begin() 和 call vundle#end() 在之間添加 Plugin 『Valloric/YouCompleteMe『, 另外,把begin() 和 end()之間除了Plugin 『VundleVim/Vundle.vim『 和 Plugin 『Valloric/YouCompleteMe『之外的其他PlugIn 都注釋掉把,感覺沒什麼卵用。

第五步:利用Vundle安裝插件

非常簡單,在終端中打開vim, 輸入" :PluginInstall ", 等待Vundle安裝完畢。這可能需要花費一段時間。當vim的底欄顯示:Done!(注意不是Done with error !!!) 就表示安裝成功。

第六步:編譯YouCompleteMe, 為了不保證出錯,我用的是完全安裝的方法。

cd ~
mkdir ycm_build
cd ycm_build
因為我要支持C/CPP的語義支持,我選擇:

cmake -G "Unix Makefiles" -DUSE_SYSTEM_LIBCLANG=ON . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp
這里,我選擇使用系統的libclang,因為我們也從官網下載了LLVM+Clang(該目錄下有 bin, lib, include 等文件夾),我們也可以執行:cmake -G "Unix Makefiles" -DPATH_TO_LLVM_ROOT=~/ycm_temp/llvm_root_dir . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp其中「~/ycm_temp/llvm_root_dir」就是我們解壓過的文件的根目錄

第七步:生成

make ycm_support_libs
到此為止,基本的配置工作就完成了,但是還有一點瑕疵:#include <iostream>, #include <stdio> vector, 什麼的都不能補全,這是因為這些頭文件的路徑沒有被找到,下面的工作就是要讓YouCompleteMe找到這些頭文件,而且,以後有什麼庫文件,比如OpenCV,OPenGL什麼的,都可以按照這個方法添加。

打開 ~/下的.vimrc文件,確保查看是否有這樣一條配置:

let g:ycm_global_ycm_extra_conf = 『~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py『
如果沒有,請修改.ycm_extra_conf.py的路徑是正確的。

打開~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py

vim ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py
您可以在flags[ * ]數組的後面添加你想要的路徑,例如: stdio.h等C語言的頭文件包含在/usr/include中,那麼您需要添加這樣一條

『-isystem『,

『/usr/include』,

注意,不要忘記後面的「,」。

⑹ vim補全插件哪個好

Valloric/YouCompleteMe可以說是vim安裝最復雜的插件之一,但是一旦裝好,卻又是非常好用的。YouCompleteMe簡稱ycm

在安裝折騰的過程中,我再一次的體會到,除了官網教程,網路上的教程都是辣雞,都是坑!

安裝准備:

1.確保已經安裝好build-essential 和 cmake 。ycm是編譯型補全插件,這兩個工具是編譯ycm用的。

sudo apt-get install build-essential cmake

2.確保已經安裝好了python-dev 和 python3-dev

sudo apt-get install python-dev python3-dev

3.下載ycm

我們使用vundle插件下載ycm。vundle是管理vim插件的vim插件,安裝很簡單,安裝vundle的教程另附了,大家也可以自行上網搜索。

在vimrc里增加如下語句,讓ycm添加到vundle的管理列表中:

Bundle 'Valloric/YouCompleteMe'
Bunlde 'SirVer/ultisnips'
Bundle 'honza/vim-snippets'

注意!!這里有2個天坑,'SirVer/ultisnips' 和'honza/vim-snippets'這兩個插件在ycm安裝文檔中沒有說明的!我是去了ultisnips的git上才看到。如果不安裝,就會在進入vim的時候報OnBufferRead的錯!

然後在vim里執行,下載並安裝列表中的插件。當然了,這里包含了我們剛增加的ycm。這個過程比較漫長,可以需要十來分鍾,耐心等待吧。

:BundleInstall

4.編譯ycm

上面的步驟只是把ycm下載下來了,但是還沒有編譯。使用如下命令編譯ycm。以下的例子,只添加對C++補全的支持。

cd ~/.vim/bundle/YouCompleteMe
./install.py --clang-completer

對其他語言的支持有,大家可以按需求添加。如果想全部語言都安裝,可以使用./install.py --all

5.配置工程

如果上面順利的話,你已經完成了ycm的安裝。最後在vimrc中添加如下快捷鍵方便使用。

let g:UltiSnipsExpandTrigger="<tab>"let g:UltiSnipsJumpForwardTrigger="<c-b>"let g:UltiSnipsJumpBackwardTrigger="<c-z>"" If you want :UltiSnipsEdit to split your window.let g:UltiSnipsEditSplit="vertical"

對於每一個工程,我們可以自定義.ycm_extra_conf.py ,這個文件可以定義自動補全的各種細節,例如搜索什麼目錄等等,都可以在裡面進行設置。

ycm是依賴clang實現補全的,如果需要c++補全,需要在.ycm_exrea_conf.py文件中添加響應的c++文件路徑。

c++文件路徑詳情可以通過以下命令查詢

echo |clang -std=c++11 -stdlib=libc++ -v -E -x c++ -

linux下怎麼編譯單片機c代碼,怎麼下載到51單片機上呢

1.編譯軟體用sdcc
2.sdcc不支持keil51c 的一些語法。要做以下修改:
sbitled1=P1^0; 改為 #define led1 P1_0
中斷函數interrupt改為__interrupt
單個位 P1^0 改為P1_0
若vim安裝插件YCM的話,要在.ycm_extra_conf.py加入以下兩個路徑
/usr/share/sdcc/include
/usr/share/sdcc/include/mcs51
沒創建一個工程都要拷貝一份.ycm_extra_conf.py到該工程的目錄下。

3.編譯用命令
` sdcc 目標文件
4.燒錄軟體用stcflash.py,該軟體只能支持stc89c52rc,不支持stc89c52。我自己親自試過。
sudo python ./stcflash.py 目標文件

⑻ 配置vim插件youcompleteme時無法自動補全c++的頭文件里的定義。

你可以到github里搜索
YouCompleteMe-x86
他在說明裡的有關 腳本配置 相關的內容.

⑼ 我自己寫了一個代碼!可是老是編譯不通過! 代碼如下

在主函數前面加一句 using namespace std;
再或者 std::cout
C++命名空間問題 去查查資料看看

熱點內容
王者榮耀電腦如何改戰區安卓 發布:2025-01-17 13:23:18 瀏覽:814
華為手機如何開啟說出密碼 發布:2025-01-17 13:23:12 瀏覽:101
伺服器在美國說明什麼 發布:2025-01-17 13:14:10 瀏覽:11
啟辰t90有哪些配置 發布:2025-01-17 13:05:40 瀏覽:38
手機微博密碼怎麼改密碼忘了怎麼辦 發布:2025-01-17 13:04:44 瀏覽:959
微笑雲伺服器 發布:2025-01-17 13:03:25 瀏覽:83
android頂部標題欄 發布:2025-01-17 13:02:28 瀏覽:692
androidjs傳遞參數 發布:2025-01-17 12:51:54 瀏覽:477
建築大師輔助腳本 發布:2025-01-17 12:47:33 瀏覽:331
sql向上 發布:2025-01-17 12:43:57 瀏覽:275