我正在尝试设置我的.emacs,以便从Emacs内部构建VS2012项目。
我按照Emacswiki上的说明执行此操作。 VS2005对我来说过去很有用。
问题是这个新版本的VS在每个错误/警告行的前面附加了一个CPU名称,并且emacs的C ++编译器解析变得混乱,并认为这是文件名的一部分。例如,错误:
5>c:\dev\proj\my_class.h(35): warning C4100: 'command' : unreferenced formal parameter (my_class.cpp)
当访问“下一个错误”时,不是提起文件和行,而是给我提示:
Find this error in (default 5>my_class.h): ~/dev/proj/
我可以在我的.emacs(或者可能是C和C ++模式)中进行调整来解决这个问题吗?或者,是否有更新版本的Emacs(或模式.el文件)更好地处理VS2012?我目前正在使用GNU Emacs 24.2.1
答案 0 :(得分:2)
我想我已经跟踪过了。
问题是不 GNU Emacs没有尝试支持VS2012编译器消息,问题是它的支持有一些错误(在24.2.1中)。
一些背景知识:Emacs用于识别错误和警告的所有正则表达式都在一个变量中,其名称为compilation-error-regexp-alist-alist
。这是在compile.el
elisp文件中声明的。
主要问题是使用列表中找到的第一次匹配,而不是最大的。 edg-1(爱迪生设计集团的LLVM前端)列表中有一个正则表达式,恰好匹配VS2012错误和警告。它在列表中早于msft,所以它被用来代替。 Presto:错误的目录匹配。
此问题在emacs开发人员列表的this thread和2012年10月14日的fixed with a patch中进行了讨论。
有两种相当简单的解决方案。
compilation-error-regexp-alist-alist
中的“msft”条目,并将其移到有问题的“edg-1”条目前面的某个位置。当您使用它时,您可能希望在反斜杠之前的第一个正则表达式行的末尾添加?
(请参阅diff link)。然后对文件进行字节编译并重新启动emacs。