2013-03-19 2 views
2

CEDET를 MinGW gcc에 자동 완성되도록 구성했지만 훌륭하게 작동하지만 STL 라이브러리 구성원 완료를 위해 g ++ 작업을 수행 할 수 없습니다.CEDET를 MinGW g ++에 대해 자동 완성하도록 설정하는 방법

;; 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)) 

: 여기

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

내 이맥스의 구성 부분이다 : 예를 들어, 내가하지 c_str() 또는 다른 기능을 얻을 수있는 표준 : : 문자열 변수를 자동으로 완료 할 수 있습니다 구성에 문제가 있습니까? MinGW g ++의 올바른 구성이 필요합니다.

+0

Alex Ott : [CEDET에 대한 부드러운 소개] (http://alexott.net/en/writings/emacs-devenv/EmacsCedet.html)에서이 기사를 보셨습니까? – Francesco

+0

@Francesco 예, 나는 그것을 읽었을 것입니다. (아마도 나는 무언가를 건너 뛰었습니다.) 그리고 정의한 클래스 멤버는 자동 완성이 가능하지만 STL 라이브러리의 멤버 또는 멤버 함수는 자동 완성을 할 수 없습니다. – toolchainX

답변

0

설정없이 내 우분투 시스템에서 샘플을 시험해 보았는데, 어떻게 해야할지 알고있는 것보다 더 많은 완료를 제공했습니다. 필자는 Semantic이 일부 파일을 포함하는 위치를 알지 못하거나 올바른 프로세서 전 심볼을 설정하지 않았다고 생각합니다.

당신이 할 경우 당신은 다음 샘플에 커서를 넣을 수 있습니다

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

는 수행

M-x semantic-analyze-debug-assist RET 

그것은하려고하는 추가 명령 당신에게 힌트의 무리를주고, 것입니다 문제를 파헤 치십시오.

설정에서 모든 포함 및 선행 처리기 파일을 설정했음을 알고 있습니다. 그 부분은 나에게 잘 보였다.

semantic/bovine/gcc.el의 코드는 STL 헤더와 같은 것을 찾는 데 사용되는 정보 유형을 GCC에 쿼리하기로되어 있습니다. 컴파일러는 STL 헤더가 사용하는 몇 가지 종류의 #define 값을 제공하며 전처리 기 심볼을 제공 한 다른 ming 헤더에는 없을 수 있습니다.

불행히도, 사용하려고하는 C++ 컴파일러의 하드 코딩 된 이름이 있습니다. 컴파일러에 다른 이름이 있으면 gcc.el 소스 파일을 편집해야 작동 할 수 있습니다. 그렇게한다면 CEDET에서 변경을 할 수 있도록 cedet-devel 메일 링리스트에 이메일을 보내십시오.

또는, string.h 파일이 어디에 있든지로드하고 완료에 사용해야하는 정의를 찾으십시오. 사용 후, 문을 필터링 #IF있는 볼 봐 :

M-X 의미-C-설명 - 환경 RET

가이 관련 될 수있는 방법을 볼 수 있습니다.