Question

Je suis en train de construire gcc pour une utilisation avec un micro contrôleur AVR et-ada AVR, et je l'ai frappé un barrage routier causé par mon compilateur régulier trop pointilleux sur la version que je avais besoin pour l'AVR. Je reçois l'avertissement suivant, ce qui provoque à son tour le gcc ou faire pour signaler une erreur:

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

Y at-il un moyen d'instruire gcc ou faire pour ne pas faillir sur les avertissements?

Était-ce utile?

La solution

Le déclencheur ici est le -gnatpg (en fait, le -gnatg): c'est le « mode de mise en œuvre de GNAT (utilisé pour la compilation des unités GNAT) ». -gnatp signifie "supprimer tous les contrôles".

Je ne suis pas sûr de l'effet plein de -gnatg, mais il provoque certainement des avertissements à traiter comme des erreurs - comme -Werror - en tout cas pendant la construction du compilateur lui-même; Je pense que je me souviens avoir vu des avertissements non mortels pendant la construction du RTS.

Une possibilité serait de compiler tout exp_ch5.adb à la main sans -gnatg; la commande que vous la liste a été publiée à gcc /, donc

$ 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

Puis remonter d'un niveau, et 'faire' à nouveau.

Ceci est un compilateur croisé, de sorte que vous ne (je l'espère!) Besoin de répéter cette opération pour les trois étapes d'une génération complète.

Autres conseils

Essayez make -k au lieu de simplement make. Cela 'continue' plutôt que de l'arrêt.

Comme une alternative à la plongée dans le système de construction, essayez de -Wno-error CFLAGS, que vous devriez être en mesure de le faire à travers l'environnement (ou au moment de la configuration, si vous utilisez le système de compilation GNU).

Il semble drapeau -Werror est situé dans Makefile. Peut-être vous pouvez chercher des options CFLAGS dans Makefile et enlever le drapeau -Werror. Le drapeau werror fera tous les avertissements en erreurs.

En général, ce n'est pas une bonne idée d'ignorer les avertissements de votre compilateur. Toutefois, si cela est une partie d'un procédé de maquillage plus grande, il est probable un drapeau de -Werror inséré plus tôt dans la séquence. Commencez par regarder pour cela.

Après avoir regardé autour, il semble y avoir une multitude de drapeaux pour contrôler les avertissements lors de la compilation du code Ada. Par exemple, -gnatwF sera Supprimer les avertissements sur formais sans référence selon ce guide . Peut-être l'interrupteur dont vous avez besoin se trouve dans la liste fournie là.

Dans gcc configurer, vous pouvez ajouter --disable-werror.

Bien qu'il soit conseillé de chercher d'abord un correctif approprié.

Comment mettre sur "les avertissements pragma (off," ... ")" dans les parties incriminées de votre code?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top