Как я могу пропустить & quot; в файле, включенном в & quot; в режиме компиляции Emacs C ++?

Мне нравится использовать emacs для компиляции моего C ++ проекта с использованием режима компиляции и next-error перейти к предупреждениям и ошибкам в источнике. Тем не менее, я нахожу это очень раздражающим, что next-error приводит меня к каждому #include для строк «В файле, включенном из» в выводе компиляции. Я знаю, что вы можете использовать compilation-skip-threshold пропустить предупреждения, но я не хочу пропустить предупреждения, и эти строки включают в себя как предупреждения.

Мне кажется, это ошибка в режиме компиляции (это не предупреждения), но эта ошибка был закрыт как «не ошибка»

В частности, для вывода, который выглядит следующим образом:

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 взять меня права на file4.h, вместо того, чтобы останавливаться в файлах с 1 по 3 в пути.

Спасибо!

6

Решение

Я попробовал это для себя. Кажется, у нас разные версии gcc, потому что мой вывод выглядит так:

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 регулярное выражение, которое ломает вещи. В моей ситуации все эти строки «из» совпадают правильно, кроме последней. Проблема в том, что он заканчивается двоеточием, и это как-то делает его предупреждением. Теперь я немного ленив, чтобы проверить, какое возможное выходное сообщение 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)

Этот фрагмент не позволил режиму компиляции подсвечивать последнюю строку «из» как предупреждение для меня.

5

Другие решения

конфигурировать compilation-skip-threshold,

2

По вопросам рекламы [email protected]