경고를 오류로 처리하지 않고 컴파일하는 방법은 무엇입니까?


94

문제는 Windows에서 잘 컴파일되는 동일한 코드가 Ubuntu에서 컴파일 할 수 없다는 것입니다. 이 오류가 발생할 때마다 :

cc1: warnings being treated as errors

이제는 큰 코드 기반이며 모든 경고를 수정하는 것을 좋아하지 않습니다.

경고에도 불구하고 성공적으로 컴파일 할 수있는 방법이 있습니까?


1
경고를 수정하는 것이 좋습니다. 즉시가 아니라면 점차적으로. 을 -Werror제거한 후에는 경고를 제거한 후 디렉토리별로 다시 추가 할 수 있습니다.
ugoren

성공적으로 컴파일하더라도 예상대로 실행되지 않을 수 있습니다. Windows에서는 잘 작동하지만 Linux에서는 즉시 충돌하는 코드를 작성하는 사람이 몇 명있었습니다.
Dennis Meng

유용한 의견과 답변에 감사드립니다. 요구 사항에 따르면 내가 시작한 모든 경고를 수정해야하는 것 같습니다. 하지만 이제 내가 받고있는 경고는 sqlite3.c에서 온 것입니다. (X-c) <= X가 항상 참이라고 가정 할 때 서명 된 오버플로가 발생하지 않는다고 가정합니다
Saurabh Verma

답변:


83

물론 -Werror입니다. 설정된 위치를 찾아 해당 플래그를 제거하십시오. 그러면 경고는 경고 일뿐입니다.


2
Daniel에게 감사하지만 내 프로젝트에는 -Werror 플래그가 설정되어 있지 않습니다. 다른 곳에서 찾아야합니까?
Saurabh Verma

13
어딘가에 설정해야하며 기본적으로 경고는 내가 아는 컴파일러에서 오류로 처리되지 않습니다. 찾을 수없는 경우 -Wno-errornightcracker가 제안한대로을 사용 하여 재정의 할 수 있습니다 . makefile에서 -Werror설정 한 플래그 뒤에가 전달 되지 않는 한 작동 CFLAGS합니다.
Daniel Fischer

31

를 사용하여 모든 경고를 처리 할 수 ​​있습니다 -Wno-error. 오류로 처리하지 않으려는 경고의 이름은 -Wno-error=<warning name>where 를 사용하여 처리되는 특정 경고를 만들 수 있습니다 <warning name>.

모든 경고 를 완전히 비활성화 하려면 -w(권장하지 않음)을 사용하십시오.


출처 : http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Warning-Options.html



4

Linux 커널을 컴파일하는 경우. 예를 들어, "사용되지 않지만 설정 변수"라는 경고를 비활성화하려는 경우 오류로 처리됩니다. 문을 추가 할 수 있습니다.

KBUILD_CFLAGS += $(call cc-option,-Wno-error=unused-but-set-variable,)

Makefile에서


3

모든 유용한 제안에 감사드립니다. 마침내 내 코드에 경고가 없는지 확인했지만 다시 sqlite3에서이 경고를 받았습니다.

Assuming signed overflow does not occur when assuming that (X - c) <= X is always true

다음 CFLAG를 추가하여 수정했습니다.

-fno-strict-overflow

코드에서 문제가있는 구문을 가리키는 많은 경고가 있습니다. 이를 비활성화하면 짧은 관점에서 계속 진행할 수 있지만 장기적으로 이러한 문제가 다시 발생하는지 여부는 알 수 없습니다.
Benjamin Bannier 2012

1
네, 맞아요. 나는 내 코드 (나는 모든 경고를 비활성화 적이 없다) 무료 경고되어 있는지 확인했습니다 것을 의미했다
사우 라브 베르 마

3

-Wall그리고 -Werror컴파일러 옵션은 사람들이 컴파일러 설정에서 사용하는 경우는, 확인하십시오 발생할 수 있습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.