2013-03-19 69 views
2

我將CEDET配置爲自動完成MinGW gcc,它工作的很好,但是我無法獲得完成STL庫成員的g ++工作。舉例來說,我不能自動完成的std :: string變量獲得c_str()或其它功能:如何配置CEDET以自動完成MinGW g ++

#include <string> 
#include <iostream> 
using namespace std; 
int main(int argc, char *argv[]) 
{ 
    string s; 
    s.  // no pop up member functions here 
    return 0; 
} 

這裏是我的.emacs的配置部分:

;; setting up for semantic-mode 
(semantic-mode 1) 
(require 'semantic/bovine/c) 

(setq MinGW-64-base-dir 
    "D:/MinGW/x86_64-w64-mingw32/include") 
(add-to-list 'semantic-lex-c-preprocessor-symbol-file 
    (concat MinGW-64-base-dir "/crtdefs.h")) 
(add-to-list 'semantic-lex-c-preprocessor-symbol-file 
    (concat MinGW-64-base-dir "/yvals.h")) 
(add-to-list 'semantic-lex-c-preprocessor-symbol-file 
    (concat MinGW-64-base-dir "/vadefs.h")) 
(add-to-list 'semantic-lex-c-preprocessor-symbol-file 
    (concat MinGW-64-base-dir "/comdefsp.h")) 
(semantic-c-reset-preprocessor-symbol-map) 

(defconst user-include-dirs 
    (list ".." "../include" "../inc" "../common" "../public" 
     "../.." "../../include" "../../inc" "../../common" "../../public")) 
(defconst win32-include-dirs 
    (list "D:/MinGW/include" 
     "D:/MinGW/x86_64-w64-mingw32/include" 
    "D:/MinGW/lib/gcc/x86_64-w64-mingw32/4.7.2/include" 
    "D:/MinGW/lib/gcc/x86_64-w64-mingw32/4.7.2/include/c++" 
    "D:/MinGW/lib/gcc/x86_64-w64-mingw32/4.7.2/include-fixed" 
)) 

(let ((include-dirs user-include-dirs)) 
    (when (eq system-type 'windows-nt) 
    (setq include-dirs (append include-dirs win32-include-dirs))) 
    (mapc (lambda (dir) 
      (semantic-add-system-include dir 'c++-mode) 
      (semantic-add-system-include dir 'c-mode)) 
     include-dirs)) 

我的配置有問題嗎? MinGW g ++的正確配置是需要的。

+0

你有沒有看過Alex Ott撰寫的這篇文章:[CEDET的簡單介紹](http://alexott.net/en/writings/emacs-devenv/EmacsCedet.html)? – Francesco 2013-03-19 07:12:22

+0

@Francesco是的,我讀過它(也許我跳過了一些東西),我定義的類成員可以自動完成,但STL lib的成員函數或成員函數不能自動完成。 – toolchainX 2013-03-19 08:52:35

回答

0

我試過你的示例在我的Ubuntu系統上沒有你的配置,它提供了比我知道如何處理更多的完成。我猜測Semantic不知道某些包含文件的位置,或者沒有設置正確的預處理器符號。

如果你這樣做:

M-x load-library RET semantic/analyze/debug RET 

然後你可以把光標放在你的樣品並做:

M-x semantic-analyze-debug-assist RET 

,它會給你一堆提示,並附加命令嘗試深入研究這個問題。

我知道你在你的設置中設置了所有包含和預處理器文件。那部分對我來說似乎沒問題。

語義/牛/ gcc.el中的代碼應該查詢您的GCC中您提供的用於查找STL標頭等信息的類型。編譯器提供了一些STL頭文件使用的#define值,可能不在您爲預處理器符號提供的其他頭文件頭中。

不幸的是,它爲它嘗試使用的C++編譯器提供了硬編碼的名稱。如果您的編譯器具有其他名稱,則可能需要編輯gcc.el源文件才能使其運行。如果是這樣,請發送cedet-devel郵件列表,以便我們可以在CEDET中進行更改。

或者,加載到你的string.h文件所在的位置,並找到它應該用來完成的定義。看看,看看哪些#IF語句過濾出來,然後用:

M-X語義-C-描述環境RET

看怎麼可能有關。