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ń?

Saurabh Verma
źródło
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.

Daniel Fischer
źródło
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

orlp
źródło
8

Rozwiązanie:

CFLAGS=-Wno-error ./configure
Zibri
źródło
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

Andy Zhang
źródło
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
Saurabh Verma
źródło
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.

Marlab
źródło