Emacs 如何为MinGW g+配置CEDET以自动完成+;

Emacs 如何为MinGW g+配置CEDET以自动完成+;,emacs,g++,mingw,cedet,Emacs,G++,Mingw,Cedet,我将CEDET配置为自动完成MingWGCC,它工作得很好,但是我无法获得用于完成STL libs成员的g++工作。例如,我无法自动完成std::string变量以获取c_str()或其他函数: #包括 #包括 使用名称空间std; int main(int argc,char*argv[]) { 字符串s; s、 //此处没有弹出成员函数 返回0; } 以下是my.emacs的配置部分: ;;语义模式的设置 (语义模式1) (需要“语义/c”) (setq MinGW-64-base-dir

我将CEDET配置为自动完成MingWGCC,它工作得很好,但是我无法获得用于完成STL libs成员的g++工作。例如,我无法自动完成std::string变量以获取c_str()或其他函数:

#包括
#包括
使用名称空间std;
int main(int argc,char*argv[])
{
字符串s;
s、 //此处没有弹出成员函数
返回0;
}
以下是my.emacs的配置部分:

;;语义模式的设置
(语义模式1)
(需要“语义/c”)
(setq MinGW-64-base-dir
“D:/MinGW/x86_64-w64-mingw32/include”)
(添加到列表“semantic-lex-c-preprocessor-symbol-file”
(concat MinGW-64-base-dir“/crtdefs.h”))
(添加到列表“semantic-lex-c-preprocessor-symbol-file”
(concat MinGW-64-base-dir“/yvals.h”))
(添加到列表“semantic-lex-c-preprocessor-symbol-file”
(concat MinGW-64-base-dir“/vadefs.h”))
(添加到列表“semantic-lex-c-preprocessor-symbol-file”
(concat MinGW-64-base-dir“/comdefsp.h”))
(semantic-c-reset-preprocessor-symbol-map)
(defconst用户包括目录)
(列表“...”../include“../inc”“../common”“../public”
“../..”“包括”“../../inc”“../../common”“../../public”))
(defconst win32包括目录)
(列表“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/包含已修复”
))
(let((包括目录用户包括目录))
(当(均衡器系统类型“windows nt”)
(setq包含目录(附加包含目录win32包含目录)))
(mapc(lambda(dir)
(语义添加系统包括dir'c++模式)
(语义添加系统包括dir'c-mode))
(包括目录)

我的配置有问题吗?需要一个正确的MinGW g++配置

我在我的Ubuntu系统上尝试了你的示例,但没有你的配置,它提供了比我所知道的更多的完整性。我猜Semantic不知道某些包含文件在哪里,或者没有设置正确的预处理器符号

如果您这样做:

M-x load-library RET semantic/analyze/debug RET
然后,您可以将光标放在样本上并执行以下操作:

M-x semantic-analyze-debug-assist RET
它会给你一些提示和额外的命令来尝试深入研究这个问题

我知道您已在设置中设置了所有包含文件和预处理器文件。那部分我觉得还可以

semantic/boven/gcc.el中的代码应该查询您的gcc,以获取您提供的信息类型,该信息用于查找STL头之类的内容。编译器提供了STL头使用的某些类型的#define值,这些值可能不在为预处理器符号提供的其他ming头中

遗憾的是,它为试图使用的C++编译器提供了硬编码的名称。如果编译器有其他名称,则可能需要编辑gcc.el源文件以使其正常工作。如果您这样做,请通过电子邮件发送cedet-devel邮件列表,以便我们可以在cedet中进行更改

或者,在string.h文件所在的位置加载,并找到它应该用于完成的定义。查看哪些#if语句将其过滤掉,然后使用:

M-x语义-c-描述-RET环境


看看这可能有什么关系。

你看过Alex Ott的这篇文章吗?@Francesco是的,我读过(可能跳过了什么),我定义的类成员可以自动完成,但STL库的成员或成员函数不能自动完成。