Clang是一個(gè)C/C++/ObjectC語言的編譯器前端鄙才,采用LLVM作為后端提供了一個(gè)性能接近GCC的編譯器。不過我們現(xiàn)在的目標(biāo)是使用Clang幫助進(jìn)行代碼分析和補(bǔ)全攒庵。
首先去Clang的官方網(wǎng)站下載一套編譯安裝,官方網(wǎng)站地址是:http://clang.llvm.org/
接下來需要安裝auto-complete栽渴,下載一份,http://cx4a.org/software/auto-complete/慢味,解壓縮后墅冷,安裝,只需要load-file install.el然后按照提示復(fù)制4行到.emacs文件即完成了安裝寞忿。
接下來是auto-complete的clang插件腔彰,下載地址,https://github.com/brianjcj/auto-complete-clang
解壓縮到任何地方霹抛,并將該路徑add-to-list,例如:
[plain] view plaincopyprint?
(add-to-list 'load-path "~/.mylisp/")
接下來做一些配置恃逻,按照給出的模板進(jìn)行修改即可:
[plain] view plaincopyprint?
(require 'auto-complete-clang)
(setq ac-clang-auto-save t)
(setq ac-auto-start t)
(setq ac-quick-help-delay 0.5)
;; (ac-set-trigger-key "TAB")
;; (define-key ac-mode-map [(control tab)] 'auto-complete)
(define-key ac-mode-map [(control tab)] 'auto-complete)
(defun my-ac-config ()
(setq ac-clang-flags
(mapcar(lambda (item)(concat "-I" item))
(split-string
"
/usr/include/c++/4.4
/usr/include/c++/4.4/i486-linux-gnu
/usr/include/c++/4.4/backward
/usr/local/include
/usr/lib/gcc/i486-linux-gnu/4.4.5/include
/usr/lib/gcc/i486-linux-gnu/4.4.5/include-fixed
/usr/include/i486-linux-gnu
/usr/include
")))
(setq-default ac-sources '(ac-source-abbrev ac-source-dictionary ac-source-words-in-same-mode-buffers))
(add-hook 'emacs-lisp-mode-hook 'ac-emacs-lisp-mode-setup)
;; (add-hook 'c-mode-common-hook 'ac-cc-mode-setup)
(add-hook 'ruby-mode-hook 'ac-ruby-mode-setup)
(add-hook 'css-mode-hook 'ac-css-mode-setup)
(add-hook 'auto-complete-mode-hook 'ac-common-setup)
(global-auto-complete-mode t))
(defun my-ac-cc-mode-setup ()
(setq ac-sources (append '(ac-source-clang ac-source-yasnippet) ac-sources)))
(add-hook 'c-mode-common-hook 'my-ac-cc-mode-setup)
;; ac-source-gtags
(my-ac-config)
需要說明的幾點(diǎn)是:
ac-clang-flags是頭文件的目錄,根據(jù)系統(tǒng)的不同可能你的頭文件目錄也會(huì)不同凸郑,列出系統(tǒng)中所有的頭文件目錄方法是:
[plain] view plaincopyprint?
$ echo "" | g++ -v -x c++ -E -
你可能會(huì)找到類似這樣的行:
[plain] view plaincopyprint?
include "..." search starts here:
include <...> search starts here:
/usr/include/c++/4.4
/usr/include/c++/4.4/i486-linux-gnu
/usr/include/c++/4.4/backward
/usr/local/include
/usr/lib/gcc/i486-linux-gnu/4.4.5/include
/usr/lib/gcc/i486-linux-gnu/4.4.5/include-fixed
/usr/include/i486-linux-gnu
/usr/include
End of search list.
中間列出的那些目錄就是你需要的芙沥,替換上面代碼中的目錄即可
ac-auto-start參數(shù)是ac的提示是否自動(dòng)啟動(dòng),如果不自動(dòng)啟動(dòng)的話救氯,將它設(shè)為nil即可歌憨,你需要補(bǔ)全的時(shí)候自己按快捷鍵進(jìn)行補(bǔ)全,快捷鍵的設(shè)置方法是:
[plain] view plaincopyprint?
(define-key ac-mode-map [(control tab)] 'auto-complete)
如果這一項(xiàng)設(shè)置為t务嫡,ac則會(huì)自動(dòng)在有補(bǔ)全的地方列出可補(bǔ)全的項(xiàng)漆改。
有的機(jī)器使用的是舊版本的clang准谚,比如假如你使用某個(gè)古代發(fā)行版自帶的舊版本clang,不支持通過stdio進(jìn)行交互樊破,則需要自動(dòng)保存文件才能正確調(diào)用clang獲取補(bǔ)全提示唆铐,設(shè)置的方法是:
[plain] view plaincopyprint?
(setq ac-clang-auto-save t)
當(dāng)然新版本的clang可能就不需要這一項(xiàng)了。