2013-03-19 5 views
6

필자는 emacs를 사용하여 컴파일 모드를 사용하여 C++ 프로젝트를 컴파일하고 next-error을 사용하여 소스의 경고 및 오류로 이동하는 것을 좋아합니다. 그러나, 나는 매우 화가났다. next-error은 컴파일 결과물에 "Include from file"라인에 #include를 넣는다. compilation-skip-threshold을 사용하여 경고를 건너 뛸 수는 있지만 경고를 건너 뛰고 싶지는 않으며 경고로 표시되는 행을 포함합니다. 나에게emacs C++ 컴파일 모드에서 "from file included from"을 건너 뛸 수 있습니까?

이 편집 모드 버그 (이 아닌 경고입니다) 것 같다,하지만 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을 통해 파일 1에서 3까지를 막지 않고 file4.h로 옮길 원합니다.

감사합니다.

+0

'gcc-include from compilation-error-regexp-alist'를 제거 해 보셨습니까? 나는 기능의 나의 이해가 그 선을 건너 뛸 것이라는 점을이다. – DrC

+0

나는 내 제안을 시도했지만 작동하지 않았다. - FYI – DrC

+0

+1 그 놀라운 경고에 대해서 – assem

답변

5

나는 그것을 직접 시도했다. 출력 결과는 다음과 같기 때문에 다른 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) 

을 컴파일 모드에서 마지막 "from"행을 강조 표시하여 경고합니다.

+0

굉장한 감사! 누군가 gcc 대신 clang을 사용하도록 프로젝트를 전환했기 때문에 메시지가 다르게 보이지만 명령이 제대로 작동하지 않습니다. 하지만 setf를 사용하면 오류가 발생합니다. (setcar (nthcdr 5 (assoc gcc -include compilation-error-regexp-alist-alist)) 0)'나는 작동하도록했습니다. 나는 lisp와 elisp로 매우 미숙한데, 어쩌면 내가 바보 같은 짓을 한 것일 수도 있지만, 작동하는 것처럼 보입니다. – stokastic

+0

@stokastic, 아니, 나는 당신이라고 생각하지 않습니다. 이 문제는 저를 오래 동안 괴롭 히고 있으며 init 파일과 Emacs 버전의 몇 가지 환생에서 살아 남았습니다. – immerrr

+0

수정 : 실제로 'gnu'와 'gcc-include'모두 OP의 출력과 일치합니다. 그래서 DrC의 제안은 'gcc-include'를 제거하는 것으로 충분하지 않습니다. 'gcc-include'를 사용하여 해당 줄을 정보로 표시하려면 정보로 표시하면 나중에 오류로 표시되지 않습니다. 이것이 작동하려면 목록에서 'gcc-include before gnu'가 중요합니다. – User123abc

2

구성 compilation-skip-threshold.