2010-03-10 9 views
7

Ich versuche, GCC für die Verwendung mit einem AVR-Mikrocontroller und AVR-Ada zu bauen, und ich habe einen Roadblock durch meinen regulären Compiler getroffen, der zu wählerisch über die Version ist, die ich für den AVR brauchte. Ich erhalte die folgende Warnung, was wiederum die gcc verursacht oder macht einen Fehler melden:gcc, make: Wie kann man die Fail-On-Warnung deaktivieren?

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 instruieren oder nicht auf Warnungen machen zum Scheitern verurteilt?

+1

Ich glaube nicht, eine der Debug-Optionen in der Behandlung von Warnungen als Fehler (zumindest nicht, dass ich finden konnte), ist das die volle Ausgabe? –

Antwort

5

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

Ich bin mir nicht sicher über die volle Wirkung von -gnatg, obwohl es sicherlich bewirkt, dass Warnungen als Fehler - wie -Werror - auf jeden Fall behandelt werden, während der Compiler selbst gebaut wird; Ich denke, ich erinnere mich an nicht-tödliche Warnungen während des Aufbaus des RTS.

Eine Möglichkeit wäre, nur exp_ch5.adb von Hand ohne -gnatg zu kompilieren; der Befehl Sie Liste wurde auf gcc ausgegeben /, so

$ 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 nach oben und wieder ‚machen‘.

Dies ist ein Cross-Compiler, also werden Sie nicht (ich hoffe!) Dies für alle drei Phasen eines vollständigen Builds wiederholen müssen.

+0

Vielen Dank, Ihre Lösung erlaubte mir, den obigen Fehler zu überwinden. Ich habe mehr Warnungen vom Ada-Compiler, aber ich werde jetzt weitermachen! –

32

Versuchen Sie make -k statt nur make. Das wird "weitermachen" anstatt zu stoppen.

+1

OMG Vielen Dank Dirk =) – Crasher

3

Es scheint -Werror Flag ist in Makefile festgelegt. Vielleicht können Sie in Makefile nach CFLAGS-Optionen suchen und das -Werror-Flag entfernen. Die Werrorfahne macht alle Warnungen zu Fehlern.

4

Im Allgemeinen ist es keine gute Idee, Warnungen von Ihrem Compiler zu ignorieren. Wenn dies jedoch ein Teil eines größeren Make-Prozesses ist, ist wahrscheinlich ein Flag -Werror früher in der Sequenz eingefügt. Fang damit an, danach zu suchen.

Nachdem Sie sich umgeschaut haben, scheint es eine Fülle von Flags zu geben, um die Warnungen beim Kompilieren des Ada-Codes zu kontrollieren. Zum Beispiel -gnatwF wird Unterdrücken Warnungen auf nicht referenzierten Formals nach this guide. Möglicherweise finden Sie den von Ihnen benötigten Schalter in der dort angegebenen Liste.

+0

Ja, nichts in dem, was er eingefügt hat, hätte ergeben, dass -Werror eingeschaltet wurde. Es musste vor dem Auszug sein. –

+0

Ich weiß es ist keine gute Idee, und ich habe versucht, eine ältere Version von gcc/gnat (gcc-4.3.2) nur so, dass ich den AVR gcc/gnat (auch gcc-4.3.2) bauen konnte, aber ich war in genau das gleiche Problem auch dort zu laufen. Nach dem Gespräch mit dem Projektinhaber 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 den Fehler oder die Warnung zu überschreiben. –

+0

Nun, ich erinnere mich, dass ich mich für kurze Zeit mit Ada beschäftigt habe, und für mich müsste der Ansatz den Build erweitern. Soweit ich mich erinnere, hat Ada recht genau über die Dinge. – ezpz

8

Als Alternative zum Tauchen in das Build-System, versuchen Sie -Wno-error in CFLAGS, die Sie über die Umgebung (oder zur Zeit konfigurieren, wenn Sie das GNU-Build-System verwenden) können sollten.

2

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

Obwohl es ratsam ist, zuerst einen richtigen Patch zu suchen.

Verwandte Themen