2014-07-23 100 views
0

我試圖讓我的.emacs設置,所以我可以從Emacs內部構建VS2012項目。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

要調整的變量是「編譯錯誤regexp-alist」和/或「編譯錯誤regexp-alist-alist」。 – legoscia

+0

@legoscia - 我正在看它。有趣的是,現在在那裏的「msft」表達式看起來應該起作用。 –

回答

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。