2013-11-28 52 views
4

我最近開始使用irony-mode在emacs(24.3.1)中完成。不過,我似乎無法添加額外的系統包含路徑來打包。諷刺模式不拾取包含路徑

我有這樣的代碼在我的配置:

(defun ac-cc-mode-clang-hooks() 
    (yas/minor-mode-on) 
    (auto-complete-mode 1) 

    ;; avoid enabling irony-mode in modes that inherits c-mode, e.g: php-mode 
    (when (member major-mode irony-known-modes) 
     (irony-mode 1)) 

    ;; set compiler flags to include header files 
    (setq irony-compile-flags '("-Iinc")) 
    (irony-reload-flags)) 

(add-hook 'c++-mode-hook 'ac-cc-mode-clang-hooks) 
(add-hook 'c-mode-hook 'ac-cc-mode-clang-hooks) 

諷刺意味的模式被正確安裝,完成完全適用於包括編譯器明確知道(即由echo "" | g++ -v -x c++ -E -打印的一切),但另外包括路徑inc路徑沒有被拿起(無論它是相對還是絕對路徑)。

但是,如果我將信息添加到.clang_complete文件並使用C-c C-b加載它,則包含路徑將被識別並使用。顯然,這是理想的設置,因爲

  1. 我不想創建一個.clang_complete文件的代碼,每個單件我正在
  2. .clang_complete文件不會自動加載少了。

有一些工作方法(不涉及每個項目的設置,我不想爲每個一段代碼項目管理文件)告訴irony-mode到哪裏尋找頭文件?

回答

4

你可以在這裏看看:https://github.com/Sarcasm/irony-mode#i-got-an-error-due-to-stdargh-how-to-solve-this

變量​​應該滿足您的需求。 它應該不需要致電irony-reload-flags

雖然它不是緩衝區局部變量,所以你不需要把它放在鉤子裏。

我想提出以下建議:

(setq irony-libclang-additional-flags 
     (append '("-I" "inc") irony-libclang-additional-flags)) 
+0

這完全適用於全球(絕對)路徑。還有兩個問題:1)如何添加多個路徑?我是否使用''(「-I」「/ IncOne」「-I」「/ IncTwo」)',2)我認爲這不適用於相對路徑,因爲使用上面的代碼不會在子目錄'inc'。日誌文件說:在完成期間發現1個錯誤/警告。 /tmp/!home!elemakil!Temp!FooBar.cpp:2:10:致命錯誤:'SomeInc.h'文件未找到',所以我猜問題是將源複製到'/ tmp'使得相對無效。這可以解決嗎? – elemakil

+0

1)是的。 2)你說得對,現在已經修好了,謝謝你的輸入。 3)不要猶豫在Github上提出問題,我偶然偶然發現了這個問題。 –

+0

現在工作就像一個魅力! – elemakil