Frage

Ich versuche, gcc für mit einem AVR Microcontroller und avr-ada Gebrauch zu bauen, und ich habe eine Straßensperre, die durch meine regelmäßigen Compiler zu wählerisch zu sein über die Version, die ich für den AVR benötigt getroffen. Ich erhalte die folgende Warnung, was wiederum die gcc verursacht oder machen 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 instruieren oder nicht auf Warnungen machen zum Scheitern verurteilt?

War es hilfreich?

Lösung

Der Auslöser ist hier die -gnatpg (eigentlich die -gnatg): Dies ist der „GNAT Implementierungsmodus (für die Erstellung GNAT Einheiten verwendet wird)“. -gnatp bedeutet "alle Prüfungen unterdrücken".

Ich bin der vollen Wirkung der -gnatg nicht sicher, obwohl es Warnungen sicherlich verursacht als Fehler behandelt werden - wie Werror - jedenfalls während der Compiler Gebäude selbst; Ich glaube, ich erinnere mich nicht tödliche Warnungen während des RTS zu bauen.

Eine Möglichkeit wäre, nur von Hand exp_ch5.adb zu kompilieren, ohne -gnatg; der Befehl Sie Liste wurde bei 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 wieder eine Ebene höher, und wieder 'machen'.

Dies ist ein Cross-Compiler, so dass Sie nicht (ich hoffe!) Müssen diese für alle drei Phasen eines vollständigen Build wiederholen.

Andere Tipps

Versuchen make -k statt nur make. Das wird 'continue' statt zu stoppen.

Als Alternative zum Tauchen in das Build-System, versucht -Wno-error in CFLAGS Einstellung, die Sie sollten durch die Umgebung (oder bei configure Zeit, wenn das GNU Build-System verwendet wird) tun können.

Es scheint Werror Flagge in Makefile gesetzt ist. Vielleicht können Sie für CFLAGS Optionen in Makefile schauen und die Werror Flagge entfernen. Die Werror Flagge wird alle Warnungen in Fehler machen.

Im Allgemeinen ist es keine gute Idee, Warnungen von Ihrem Compiler zu ignorieren. Wenn dies jedoch ein Teil eines größeren Prozesses ist machen es ist wahrscheinlich ein -Werror Flag früher in der Sequenz insertiert. Beginnen Sie mit der für das suchen.

Nach einem Blick um, scheint es eine Fülle von Fahnen werden Warnungen zu steuern, während Ada-Code zu kompilieren. Zum Beispiel -gnatwF wird Unterdrückt Warnungen auf unreferenced Formalen nach dieses Handbuch . Möglicherweise ist der Schalter, den Sie benötigen, kann in der angezeigten Liste dort zu finden.

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

Obwohl es ratsam, zuerst einen geeigneten Patch zu suchen.

Wie wäre es "Pragma Warnungen (off" ... ")" in die beanstandeten Teile des Codes setzen?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top