Domanda

Sto cercando di costruire gcc per l'uso con un microcontrollore AVR e AVR-ada, e ho colpito un posto di blocco causato dalla mia compilatore normale essere troppo schizzinosi riguardo la versione che mi serviva per l'AVR. Ottengo il seguente avviso, che a sua volta fa sì che il gcc o fare per segnalare un errore:

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

C'è un modo per istruire gcc o fare per non fallire l'avvertimenti?

È stato utile?

Soluzione

Il trigger qui è la -gnatpg (in realtà, la -gnatg): questo è il "modo di implementazione GNAT (utilizzato per la compilazione unità GNAT)". -gnatp significa "sopprimere tutti i controlli".

Non sono sicuro che l'effetto pieno di -gnatg, anche se provoca certamente avvertimenti di essere trattati come errori - come -Werror - in ogni caso, mentre la costruzione del compilatore stesso; Penso Ricordo di aver visto gli avvertimenti non fatali, mentre la costruzione degli RTS.

Una possibilità sarebbe quella di compilare solo exp_ch5.adb a mano senza -gnatg; il comando che si elenco è stato rilasciato al gcc /, quindi

$ 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

Poi indietro di un livello, e 'fare' di nuovo.

Questo è un cross-compilatore, in modo da non (spero!) Bisogno di ripetere questa operazione per tutte e tre le fasi di una generazione completa.

Altri suggerimenti

Prova make -k invece di make. Che 'continuare', piuttosto che di arresto.

In alternativa a tuffarsi nel sistema di compilazione, provare a impostare -Wno-error in CFLAGS, che si dovrebbe essere in grado di fare attraverso l'ambiente (o al momento della configurazione, se si utilizza il sistema di compilazione GNU).

Sembra bandiera -Werror si trova in Makefile. Forse si può cercare le opzioni CFLAGS in Makefile e rimuovere il flag -Werror. La bandiera Werror farà tutti gli avvisi in errori.

In generale, non è una buona idea di ignorare gli avvertimenti dal compilatore. Tuttavia, se questa è una parte di un più ampio processo di make è probabile una bandiera -Werror inserito in precedenza nella sequenza. Inizia con la ricerca di questo.

Dopo aver cercato, sembra che ci sia un gran numero di bandiere per il controllo avvertimenti durante la compilazione di codice Ada. Per esempio, -gnatwF sarà Sopprimere le avvertenze sul formali senza riferimenti in base al questa guida . Forse l'interruttore si richiede può essere trovato nell'elenco di lì.

In gcc configurare è possibile aggiungere --disable-werror.

Anche se è consigliabile cercare una patch adeguata prima.

Come di mettere "warnings (off," ... ")" nelle parti incriminate del codice?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top