Pregunta

Estoy intentando construir gcc para usarlo con un microcontrolador AVR y avr-ada, y me encontré con un obstáculo causado porque mi compilador habitual era demasiado exigente con la versión que necesitaba para el AVR.Recibo la siguiente advertencia, lo que a su vez hace que gcc o make informen un error:

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

¿Hay alguna manera de instruir a gcc o hacer que no fallen las advertencias?

¿Fue útil?

Solución

El disparador aquí es la -gnatpg (en realidad, el -gnatg): este es el "modo de aplicación GNAT (utilizado para la elaboración de unidades GNAT)". -gnatp significa "suprimir todos los cheques".

No estoy seguro de que los resultados completos de -gnatg, aunque ciertamente provoca advertencias a ser tratados como errores - como -Werror - en todo caso, mientras que la construcción del propio compilador; Creo que recuerdo haber visto advertencias no fatales, mientras que la construcción de los RTS.

Una posibilidad sería la de compilar solamente exp_ch5.adb con la mano sin -gnatg; el comando que la lista se expidieron en gcc /, de modo

$ 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

A continuación, una copia de seguridad de una sola planta, y 'hacer' de nuevo.

Este es un compilador cruzado, por lo que no será (espero!) Que tenga que repetir esta operación para las tres etapas de una construcción completa.

Otros consejos

Trate make -k en lugar de sólo make. Eso va a 'continuar' en lugar de parada.

Como alternativa a sumergirse en el sistema de construcción, intente establecer -Wno-error en CFLAGS, que debe ser capaz de hacerlo a través del entorno (o en el momento de configuración, si se utiliza el sistema de compilación GNU).

Parece bandera -Werror se encuentra en el Makefile. Tal vez usted puede buscar opciones CFLAGS en el Makefile y quitar la bandera -Werror. La bandera werror hará que todas las advertencias en errores.

En general, no es una buena idea hacer caso omiso de las advertencias de su compilador. Sin embargo, si esto es una parte de un proceso de hacer más grande es probable una bandera -Werror insertado anteriormente en la secuencia. Comience buscando para ello.

Después de mirar a su alrededor, parece que hay una gran cantidad de banderas para controlar advertencias durante la compilación de código Ada. Por ejemplo, -gnatwF será reprimir advertencias en los formales no referenciados según esta guía . Posiblemente el interruptor necesita se puede encontrar en la lista prevista allí.

En gcc configurar puede agregar --disable-werror.

A pesar de que es recomendable buscar un parche adecuado en primer lugar.

¿Qué hay de poner "advertencias pragma (apagado," ... ")" en las partes ofensivas de su código?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top