Wie kompiliere ich, ohne dass Warnungen als Fehler behandelt werden?

94

Das Problem ist, dass derselbe Code, der unter Windows gut kompiliert wird, unter Ubuntu nicht kompiliert werden kann. Jedes Mal, wenn ich diesen Fehler erhalte:

cc1: warnings being treated as errors

Jetzt ist es eine große Codebasis und ich mag es nicht, alle Warnungen zu korrigieren.

Kann ich trotz der Warnungen erfolgreich kompilieren?

Saurabh Verma
quelle
1
Ich empfehle dringend, die Warnungen zu beheben. Wenn nicht sofort, dann allmählich. Sobald Sie es entfernt haben -Werror, können Sie es verzeichnisweise wieder hinzufügen, nachdem Sie Warnungen entfernt haben.
Ugoren
Selbst wenn Sie erfolgreich kompilieren, läuft es möglicherweise nicht wie erwartet. Einige Leute haben Code geschrieben, der unter Windows einwandfrei funktioniert, unter Linux jedoch sofort abstürzt.
Dennis Meng
Vielen Dank an alle für ihre nützlichen Kommentare und Antworten. Entsprechend der Anforderung muss ich anscheinend alle Warnungen korrigieren, die ich gestartet habe. Aber jetzt ist die Warnung, die ich bekomme, von sqlite3.c: Angenommen, ein signierter Überlauf tritt nicht auf, wenn angenommen wird, dass (X - c) <= X immer wahr ist
Saurabh Verma

Antworten:

83

Finden Sie sicher, wo gesetzt -Werrorist, und entfernen Sie das Flag. Dann sind Warnungen nur Warnungen.

Daniel Fischer
quelle
2
Danke Daniel, aber in meinem Projekt ist kein Fehler-Flag gesetzt. Soll ich woanders danach suchen?
Saurabh Verma
13
Irgendwo muss es festgelegt werden, standardmäßig werden Warnungen von keinem mir bekannten Compiler als Fehler behandelt. Wenn Sie es nicht finden können, können Sie versuchen, es zu überschreiben -Wno-error, wie von Nightcracker vorgeschlagen. Das sollte funktionieren, es sei denn, das -Werrorwird nach den Flags übergeben, die Sie CFLAGSim Makefile gesetzt haben.
Daniel Fischer
31

Sie können alle Warnungen, die als solche behandelt werden, mit erstellen -Wno-error. Sie können bestimmte Warnungen behandelt werden als solche machen , indem Sie , -Wno-error=<warning name>wo <warning name>ist der Name der Warnung Sie nicht als Fehler behandelt werden sollen.

Wenn Sie alle Warnungen vollständig deaktivieren möchten , verwenden Sie -w(nicht empfohlen).


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

orlp
quelle
4

Wenn Sie einen Linux-Kernel kompilieren. Wenn Sie beispielsweise die Warnung "Nicht verwendete, aber gesetzte Variable" deaktivieren möchten, wurde dies als Fehler behandelt. Sie können eine Anweisung hinzufügen:

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

in deinem Makefile

Andy Zhang
quelle
3

Vielen Dank für alle hilfreichen Vorschläge. Ich habe endlich sichergestellt, dass mein Code keine Warnungen enthält, habe aber wieder diese Warnung von sqlite3 erhalten:

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

was ich durch Hinzufügen der folgenden CFLAG behoben habe:

-fno-strict-overflow
Saurabh Verma
quelle
Viele Warnungen weisen Sie auf problematische Konstrukte in Ihrem Code hin. Wenn Sie sie deaktivieren, können Sie in der kurzen Perspektive weitermachen, aber Sie werden nie wissen, ob diese Probleme Sie auf lange Sicht verfolgen werden.
Benjamin Bannier
1
Ja, du hast recht. Ich hatte gemeint, dass ich sichergestellt habe, dass mein Code warnungsfrei ist (ich habe nicht alle Warnungen deaktiviert)
Saurabh Verma
3

-Wallund -WerrorCompileroptionen können dies verursachen. Überprüfen Sie, ob diese in den Compilereinstellungen verwendet werden.

Marlab
quelle
3

Lösung:

CFLAGS=-Wno-error ./configure
Zibri
quelle