2

MinGW gcc のオートコンプリートを行うように CEDET を構成しました。これはうまく機能しますが、STL ライブラリのメンバーを補完するための g++ の作業を取得できません。たとえば、std::string 変数をオートコンプリートして c_str() やその他の関数を取得することはできません。

#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++ の適切な構成が必要です。

4

1 に答える 1

0

私はあなたの設定なしで私のUbuntuシステムであなたのサンプルを試しました、そしてそれは私が何をすべきかを知っていたより多くの完了を提供しました。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ステートメントがそれをフィルターで除外するかを確認してから、次を使用します。

Mxセマンティック-c-describe-environmentRET

それがどのように関連しているのかを確認します。

于 2013-03-20T00:02:15.927 に答える