Jak skompilować bez traktowania ostrzeżeń jako błędów?


96

Problem polega na tym, że ten sam kod, który dobrze kompiluje się w systemie Windows, nie jest w stanie skompilować się na Ubuntu. Za każdym razem, gdy otrzymuję ten błąd:

cc1: warnings being treated as errors

Teraz jest to duża baza kodu i nie lubię naprawiać wszystkich ostrzeżeń.

Czy jest jakiś sposób na pomyślną kompilację pomimo ostrzeżeń?


1
Zdecydowanie sugeruję próbę naprawienia ostrzeżeń. Jeśli nie od razu, to stopniowo. Gdy się pozbędziesz -Werror, możesz dodać go ponownie dla poszczególnych katalogów, po usunięciu ostrzeżeń.
ugoren

Nawet jeśli kompilacja przebiegnie pomyślnie, może nie działać zgodnie z oczekiwaniami. Kilka osób napisało kod, który działa dobrze w systemie Windows, ale natychmiast ulega awarii w systemie Linux.
Dennis Meng

Dziękuję wszystkim za przydatne komentarze i odpowiedzi. Zgodnie z wymaganiem wydaje mi się, że muszę naprawić wszystkie ostrzeżenia, które uruchomiłem. Ale teraz ostrzeżenie, które otrzymuję, pochodzi z sqlite3.c: Zakładając, że przepełnienie ze znakiem nie występuje przy założeniu, że (X - c) <= X jest zawsze prawdziwe
Saurabh Verma

Odpowiedzi:


84

Jasne, sprawdź, gdzie -Werrorjest ustawione i usuń tę flagę. Wtedy ostrzeżenia będą tylko ostrzeżeniami.


2
Dzięki Daniel, ale w moim projekcie nie ma ustawionej flagi -Werror. Powinienem poszukać go gdzie indziej?
Saurabh Verma,

13
Gdzieś trzeba to ustawić, domyślnie ostrzeżenia nie są traktowane jako błędy przez żaden znany mi kompilator. Jeśli nie możesz go znaleźć, możesz spróbować -Wno-errorzastąpić go , jak zasugerował Nightcracker. Powinno to zadziałać, chyba że -Werrorzostanie przekazana po flagach, które ustawiłeś w CFLAGSpliku makefile.
Daniel Fischer,

33

Wszystkie ostrzeżenia można traktować jako takie, używając -Wno-error. Możesz traktować określone ostrzeżenia jako takie, używając -Wno-error=<warning name>gdzie <warning name>jest nazwą ostrzeżenia, którego nie chcesz traktować jako błąd.

Jeśli chcesz całkowicie wyłączyć wszystkie ostrzeżenia, użyj -w(niezalecane).


Źródło: http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Warning-Options.html




4

Jeśli kompilujesz jądro Linuksa. Na przykład, jeśli chcesz wyłączyć ostrzeżenie, że „nieużywana-ale-ustawiona-zmienna” jest traktowane jako błąd. Możesz dodać oświadczenie:

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

w twoim Makefile


3

Dzięki za wszystkie pomocne sugestie. W końcu upewniłem się, że w moim kodzie nie ma żadnych ostrzeżeń, ale znowu otrzymałem to ostrzeżenie od sqlite3:

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

które naprawiłem, dodając następujący CFLAG:

-fno-strict-overflow

Istnieje wiele ostrzeżeń wskazujących na problematyczne konstrukcje w kodzie. Wyłączenie ich pozwoli ci przejść dalej w krótkiej perspektywie, ale nigdy nie wiesz, czy te problemy wrócą, by cię prześladować na dłuższą metę.
Benjamin Bannier,

1
Tak masz rację. Miałem na myśli, że zrobiłem pewien, że mój kod jest ostrzeżenie za darmo (nie zostały wyłączone wszystkie ostrzeżenia)
Saurabh Verma

3

-Walli -Werroropcje kompilatora mogą to powodować, sprawdź, czy są one używane w ustawieniach kompilatora.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.