2013-03-19 11 views
6

私はソースで警告やエラーにジャンプするコンパイル・モードとnext-errorを使用して、私のC++プロジェクトをコンパイルするためのemacsを使用して大好きです。しかし、私はnext-errorがコンパイル出力に "from file included from"という行をすべて#includeしてくれることを非常に迷惑にしています。 compilation-skip-thresholdを使用して警告をスキップできることはわかっていますが、警告をスキップする必要はありません。これらの行は警告として表示されます。私にemacs C++コンパイルモードで「from file included」をスキップできますか?

これは(これらは警告ではありません)コンパイルモードのバグのようですが、this bugは、このような出力のために、具体的に「ないバグ」として

を閉じられました:

In file included from /path/to/file1.h:linenum1: 
In file included from /path/to/file2.h:linenum2: 
In file included from /path/to/file3.h:linenum3: 
/path/to/file4.h:linenum4:columnnum4: warning: you are bad at c++ 
私は next-errorではなく、途中で3を介してファイル1で停止するので、右file4.hに私を取ることにしたいです。

ありがとうございます!

+0

あなたは、コンパイル・エラー - 正規表現 - 連想リストからGCC-含ま」削除しようとしたことがありますか?私は機能を理解していませんが、それらの行をスキップすることです。 – DrC

+0

私は私の提案をしようと、それはうまくいきませんでした - FYI – DrC

+0

+1ちょうどその素晴らしい警告のため – assem

答えて

5

私は自分自身のためにそれを試してみました。私の出力は次のようになります:

g++ test.cc 
In file included from file3.h:1:0, 
       from file2.h:1, 
       from file1.h:2, 
       from test.cc:2: 
file4.h:1:2: warning: #warning "you are bad at c++" [-Wcpp] 

しかし、私はまだ問題があります。明らかに、事を壊すのは'gcc-include正規表現です。私の状況では、すべての "from"行は正しく一致しますが、最後の行は正しく一致します。問題は、それがコロンで終わることで、何とかそれが警告になります。私は(?その理由があるはず、ハァッ)出力メッセージは、このようなマッチングの対象を行い可能何のgccをチェックするために、今少し怠惰なので、私はただの質問にお答えします:

;; This element is what controls the matching behaviour: according to 
;; `compilation-error-regexp-alist` doc, it means if subexpression 4 of the 
;; regexp matches, it's a warning, if subexpression 5 matches, it's an info. 
(nth 5 (assoc 'gcc-include compilation-error-regexp-alist-alist)) 
(4 . 5) 

;; We could try and tinker with the regexp, but it's simpler to just set it as 
;; "always match as info". 
(setf (nth 5 (assoc 'gcc-include compilation-error-regexp-alist-alist)) 0) 

このスニペットが停止しました私のための警告として、最後の "from"行をハイライト表示しないようにします。

+0

素晴らしいありがとう! gccの代わりにclangを使うようにプロジェクトを切り替えた人がいるので、メッセージは違って見えるが、あなたのコマンドはうまくいった。私はsetfでエラーが発生しましたが、それを 'setcar(nthcdr 5(assoc 'gcc-include compilation-error-regexp-alist-alist))に変更することで0になってしまいました。私はlispとelispにはとても慣れていないので、何かばかげてしまったかもしれませんが、うまくいくようです。 – stokastic

+0

@stokastic、いいえ、あなただとは思いません。この問題は、私の悩みの種であり、私のinit-fileとEmacsのいくつかのバージョンの復活から生き延びました。 – immerrr

+0

修正:実際には、gnuとgcc-includeの両方がOPの出力と一致します。だからこそ、DrCが「gcc-include」を削除する提案は十分ではありません。これらの行を情報としてマークするためにgcc-includeを使用する考え方は、情報としてマークすると後でエラーとしてマークされないようにする必要があります。これが機能するには、リストの 'gcc-include before gnu'が重要であることに注意してください。 – User123abc

2

設定compilation-skip-threshold

関連する問題