2010-03-10 12 views
7

Estoy tratando de compilar gcc para su uso con un microcontrolador AVR y avr-ada, y me he topado con un obstáculo debido a que mi compilador habitual es demasiado quisquilloso con la versión que necesitaba para el AVR. Me da la siguiente advertencia, que a su vez hace que el gcc o hacer para informar de un error:gcc, marca: cómo deshabilitar la advertencia de falla?

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 una manera de instruir a gcc o hacer a no fallar en las advertencias?

+1

No creo que ninguna de las opciones de depuración tenga como resultado tratar las advertencias como errores (al menos no que yo pueda encontrar), ¿es eso la salida completa? –

Respuesta

5

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

No estoy seguro del efecto completo de -gnatg, aunque ciertamente hace que las advertencias se traten como errores, como -Werror- en cualquier caso mientras se compila el compilador; Creo que recuerdo haber visto advertencias no fatales mientras construía el RTS.

Una posibilidad sería compilar simplemente exp_ch5.adb a mano sin -gnatg; el comando que la lista se expidieron en gcc /, por lo

$ 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' otra vez.

Este es un compilador cruzado, por lo que no (¡espero!) Necesite repetir esto para las tres etapas de una compilación completa.

+0

Gracias, su solución me permitió superar el error anterior. Tengo más advertencias del compilador de Ada, ¡pero voy a seguir adelante ahora! –

32

Pruebe make -k en lugar de simplemente make. Eso 'continuará' en lugar de detenerse.

+1

OMG Gracias Dirk =) – Crasher

3

Parece que el indicador de error se establece en Makefile. Tal vez pueda buscar las opciones de CFLAGS en Makefile y eliminar el indicador -Werror. La bandera de Werror convertirá todas las advertencias en errores.

4

En general, no es una buena idea ignorar las advertencias de su compilador. Sin embargo, si esta es una porción de un proceso de fabricación más grande, es probable que haya una bandera -Werror insertada anteriormente en la secuencia. Comience por buscar eso.

Después de mirar a su alrededor, parece que hay una gran cantidad de indicadores para controlar las advertencias al compilar el código Ada. Por ejemplo, -gnatwFSuprime las advertencias en formals sin referencias según this guide. Posiblemente, el cambio que necesita se puede encontrar en la lista que se proporciona allí.

+0

Sí, nada en lo que pegó habría resultado en "Espejo activado". Tenía que ser anterior al extracto. –

+0

Sé que no es una buena idea, y traté de construir una versión anterior de gcc/gnat (gcc-4.3.2) solo para poder construir el AVR gcc/gnat (también gcc-4.3.2), pero estaba encontrando exactamente el mismo problema allí también. Después de hablar con el propietario del proyecto, me dijo que mi sistema Ada compilador (gcc-4.3.4) "huele demasiado nuevo" para la base de código, y mis opciones eran piratear el código fuente o intentar anular el error o la advertencia. –

+0

Bueno, recuerdo haber tratado con Ada por un breve tiempo y, para mí, el enfoque tendría que ser aumentar la construcción. Como recuerdo, Ada tiene razón sobre las cosas. – ezpz

8

Como alternativa a bucear en el sistema de compilación, intente configurar -Wno-error en CFLAGS, lo que debería poder hacer a través del entorno (o en el momento de configurar, si usa el sistema de compilación GNU).

2

En gcc configure puede agregar --disable-werror.

Aunque es aconsejable buscar primero un parche adecuado.

Cuestiones relacionadas