Pergunta

Estou tentando construir o GCC para uso com um micro controlador AVR e AVR-ADA, e acertei um obstáculo causado pelo meu compilador comum ser muito exigente com a versão que eu precisava para o AVR. Recebo o seguinte aviso, que por sua vez faz com que o GCC ou faça relatar um erro:

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

Existe uma maneira de instruir o GCC ou fazer para não falhar nos avisos?

Foi útil?

Solução

O gatilho aqui é o -gnatpg (na verdade, o -gnatg): este é o "Modo de implementação do GNAT (usado para compilar as unidades GNAT)". -gnatp significa "suprimir todas as verificações".

Não tenho certeza do efeito total do -gnatg, embora certamente faça com que os avisos sejam tratados como erros -como -werror -de qualquer forma enquanto construíram o próprio compilador; Acho que me lembro de ver avisos não fatais enquanto construíram os RTs.

Uma possibilidade seria compilar apenas exp_ch5.adb manualmente sem -gnatg; A lista de comando foi emitida no GCC/, então

$ 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

Em seguida, faça backup de um nível e 'faça' novamente.

Este é um compilador cruzado, então você não vai (espero!) Precisa repetir isso nos três estágios de uma construção completa.

Outras dicas

Tentar make -k em vez de apenas make. Isso vai 'continuar' em vez de parar.

Como alternativa para mergulhar no sistema de construção, tente configurar -Wno-error Nos CFLAGs, que você poderá fazer através do ambiente (ou na hora da configuração, se estiver usando o sistema de construção GNU).

Parece que -werror sinalizador está definido no Makefile. Talvez você possa procurar opções de CFLAGS no Makefile e remover o sinalizador -werror. A bandeira Werror fará com que todos os avisos em erros.

Em geral, não é uma boa idéia ignorar avisos do seu compilador. No entanto, se essa é uma parte de um processo de fabricação maior, provavelmente existe um -Werror Flag inserido anteriormente na sequência. Comece procurando por isso.

Depois de olhar em volta, parece haver uma riqueza de bandeiras para controlar os avisos enquanto compilam o código da ADA. Por exemplo, -gnatwF vai Suprimir avisos em formais não referenciados de acordo com este guia. Possivelmente, o comutador que você precisa pode ser encontrado na lista fornecida lá.

Na configuração do GCC, você pode adicionar --disable-werror.

Embora seja aconselhável procurar um patch adequado primeiro.

Que tal colocar "avisos de Pragma (fora," ... ")" nas partes ofensivas do seu código?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top