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.