Wie kann ich Fehler bei Warnung deaktivieren, wenn ich GCC und Make verwende?

Lesezeit: 5 Minuten

Benutzeravatar von Dr. Watson
Dr Watson

Ich versuche, GCC für die Verwendung mit einem zu erstellen AVR Mikrocontroller und avr-ada, und ich bin auf eine Straßensperre gestoßen, die dadurch verursacht wurde, dass mein regulärer Compiler zu wählerisch in Bezug auf die Version war, die ich für den AVR benötigte. Ich erhalte die folgende Warnung, die wiederum dazu führt, dass GCC oder Make einen Fehler melden:

gcc -c -g -O2 -gnatpg -gnata -nostdinc -I- -I. -Iada
  -I../../gcc/ada ../../gcc/ada/exp_ch5.adb -o ada/exp_ch5.o
exp_ch5.adb:177:16: warning: function "Has_Address_Clause" is not referenced
make[2]: *** [ada/exp_ch5.o] Error 1
make[1]: *** [all-gcc] Error 2
make: *** [all] Error 2

Gibt es eine Möglichkeit, GCC oder Make anzuweisen, bei Warnungen nicht zu scheitern?

  • Ich glaube nicht, dass eine der Debug-Optionen dazu führt, dass Warnungen als Fehler behandelt werden (zumindest nicht, die ich finden konnte), ist das die vollständige Ausgabe?

    – Tim Post

    10. März 2010 um 3:15 Uhr

  • Normalerweise (wenn nicht verwendet -gnatg um alle für einen Compiler-Build erforderlichen Prüfungen anzuwenden), verwendet GNAT (Ada in GCC). -gnatwe Warnungen als Fehler zu behandeln und -gnatwn das abzubrechen

    – Simon Wright

    23. Oktober um 15:58 Uhr

Versuchen make -k statt nur make. Das wird „weitergehen“, anstatt aufzuhören.

Jacks Benutzeravatar
Jack

Als Alternative zum Eintauchen in das Build-System versuchen Sie es mit Setting -Wno-error in CFLAGS, was Sie über die Umgebung tun können sollten (oder zur Konfigurationszeit, wenn Sie das GNU-Build-System verwenden).

Benutzeravatar von Simon Wright
Simon Wright

Der Auslöser hier ist das -gnatpg (eigentlich das -gnatg): Dies ist der “GNAT-Implementierungsmodus (der zum Kompilieren von GNAT-Einheiten verwendet wird)”. -gnatp bedeutet “alle Prüfungen unterdrücken”.

Ich bin mir der vollen Wirkung von -gnatg nicht sicher, obwohl es sicherlich dazu führt, dass Warnungen als Fehler behandelt werden — wie -Werror — jedenfalls beim Erstellen des Compilers selbst; Ich glaube, ich erinnere mich, dass ich beim Erstellen des RTS nicht schwerwiegende Warnungen gesehen habe.

Eine Möglichkeit wäre, einfach exp_ch5.adb ohne -gnatg von Hand zu kompilieren; Der Befehl, den Sie auflisten, wurde auf gcc/ ausgegeben, also

$ cd gcc
$ gcc -c -g -O2 -gnatp -gnata -nostdinc -I- -I. -Iada -I../../gcc/ada \
  ../../gcc/ada/exp_ch5.adb -o ada/exp_ch5.o

Dann eine Ebene zurück und erneut “make”.

Dies ist ein Cross-Compiler, sodass Sie dies (hoffentlich!) nicht für alle drei Phasen eines vollständigen Builds wiederholen müssen.

  • Vielen Dank, Ihre Lösung hat es mir ermöglicht, den obigen Fehler zu umgehen. Ich habe noch mehr Warnungen vom Ada-Compiler, aber ich werde jetzt weitermachen!

    – Dr. Watson

    11. März 2010 um 12:51 Uhr

  • Was ist “RTS”? Laufzeitsystem?

    – Peter Mortensen

    23. Oktober um 1:27


  • @Peter Mortensen, ja.

    – Simon Wright

    23. Oktober um 15:54 Uhr

Benutzeravatar von ZelluX
ZelluX

Es scheint die -Fehler Flag ist im Makefile gesetzt. Vielleicht können Sie im Makefile nach den CFLAGS-Optionen suchen und das Flag -Werror entfernen. Das Werror-Flag macht alle Warnungen zu Fehlern.

Benutzeravatar von ezpz
espz

Im Allgemeinen ist es keine gute Idee, Warnungen Ihres Compilers zu ignorieren. Wenn dies jedoch ein Teil eines größeren Herstellungsprozesses ist, gibt es wahrscheinlich eine -Werror Flag, das früher in der Sequenz eingefügt wurde. Beginnen Sie damit, danach zu suchen.

Nachdem ich mich umgesehen habe, scheint es eine Fülle von Flags zu geben, um Warnungen beim Kompilieren von Ada-Code zu steuern. Zum Beispiel, -gnatwF Wille Warnungen bei nicht referenzierten Formalen unterdrücken entsprechend diese Anleitung. Eventuell finden Sie den von Ihnen benötigten Schalter in der dort bereitgestellten Liste.

  • Ja, nichts in dem, was er eingefügt hat, hätte dazu geführt, dass -Werror aktiviert wurde. Es musste vor dem Auszug sein.

    – Tim Post

    10. März 2010 um 3:49 Uhr

  • Ich weiß, dass das keine gute Idee ist, und ich habe versucht, eine ältere Version von gcc/gnat (gcc-4.3.2) zu bauen, nur damit ich den AVR gcc/gnat (ebenfalls gcc-4.3.2) bauen konnte, aber ich lief dort auch genau das gleiche Problem. Nachdem er mit dem Projektbesitzer gesprochen hatte, sagte er mir, dass mein System-Ada-Compiler (gcc-4.3.4) für die Codebasis “zu neu riecht”, und meine Optionen waren, den Quellcode zu hacken oder zu versuchen, den Fehler oder die Warnung zu überschreiben.

    – Dr. Watson

    10. März 2010 um 14:01 Uhr

  • Nun, ich erinnere mich, dass ich kurz mit Ada zu tun hatte, und für mich müsste der Ansatz darin bestehen, den Build zu erweitern. Soweit ich mich erinnere, ist Ada ziemlich pingelig in Sachen.

    – ezpz

    10. März 2010 um 14:52 Uhr

  • Auch hier stimme ich dem zu, was Sie sagen. Ich werde einige der Optionen, die Sie aufgelistet haben, sowie andere in diesem Thread ausprobieren, wenn ich heute nach Hause komme, aber ich lerne, nur die Windows-Version zu verwenden, da ich leicht eine Binärdatei bekommen und mich an die Arbeit machen kann.

    – Dr. Watson

    10. März 2010 um 15:19 Uhr

Benutzeravatar von Bob Blogge
Bob Blogge

In gcc configure können Sie hinzufügen --disable-werror.

Es ist jedoch ratsam, zuerst nach einem geeigneten Patch zu suchen.

  • Ja, nichts in dem, was er eingefügt hat, hätte dazu geführt, dass -Werror aktiviert wurde. Es musste vor dem Auszug sein.

    – Tim Post

    10. März 2010 um 3:49 Uhr

  • Ich weiß, dass das keine gute Idee ist, und ich habe versucht, eine ältere Version von gcc/gnat (gcc-4.3.2) zu bauen, nur damit ich den AVR gcc/gnat (ebenfalls gcc-4.3.2) bauen konnte, aber ich lief dort auch genau das gleiche Problem. Nachdem er mit dem Projektbesitzer gesprochen hatte, sagte er mir, dass mein System-Ada-Compiler (gcc-4.3.4) für die Codebasis “zu neu riecht”, und meine Optionen waren, den Quellcode zu hacken oder zu versuchen, den Fehler oder die Warnung zu überschreiben.

    – Dr. Watson

    10. März 2010 um 14:01 Uhr

  • Nun, ich erinnere mich, dass ich kurz mit Ada zu tun hatte, und für mich müsste der Ansatz darin bestehen, den Build zu erweitern. Soweit ich mich erinnere, ist Ada ziemlich pingelig in Sachen.

    – ezpz

    10. März 2010 um 14:52 Uhr

  • Auch hier stimme ich dem zu, was Sie sagen. Ich werde einige der Optionen, die Sie aufgelistet haben, sowie andere in diesem Thread ausprobieren, wenn ich heute nach Hause komme, aber ich lerne, nur die Windows-Version zu verwenden, da ich leicht eine Binärdatei bekommen und mich an die Arbeit machen kann.

    – Dr. Watson

    10. März 2010 um 15:19 Uhr

Benutzeravatar von Peter Mortensen
Peter Mortensen

Fügen Sie „Pragma warnings(off, „…“)“ in die anstößigen Teile Ihres Codes ein.

Sehen http://www.adacore.com/2007/11/19/ada-gem-18/.

  • Der Link ist kaputt: “Die gesuchte Seite kann nicht gefunden werden”

    – Peter Mortensen

    25. Oktober um 20:23 Uhr

  • Betreff “pragma warnings“: Meinst du so etwas wie #pragma GCC diagnostic?

    – Peter Mortensen

    25. Oktober um 20:27 Uhr

1432990cookie-checkWie kann ich Fehler bei Warnung deaktivieren, wenn ich GCC und Make verwende?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy