Emacs支持VS2012构建

时间:2014-07-23 18:31:01

标签: c++ visual-studio-2012 emacs

我正在尝试设置我的.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

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中进行了讨论。

有两种相当简单的解决方案。

  1. 升级到Emacs 24.3或更高版本。这应该有补丁。
  2. (为方便起见)编辑lisp / progmodes / compile.el文件。找到compilation-error-regexp-alist-alist中的“msft”条目,并将其移到有问题的“edg-1”条目前面的某个位置。当您使用它时,您可能希望在反斜杠之前的第一个正则表达式行的末尾添加?(请参阅diff link)。然后对文件进行字节编译并重新启动emacs。