Pergunta

O Small Device C Compiler (SDCC) produzirá um arquivo ihx (Intel Hex) mesmo se houver erros de referência indefinidos durante a etapa de link.Este comportamento causa problemas ao usar SDCC em um Makefile porque se você definir o arquivo ihx como seu destino make, então make não terá uma boa maneira de saber que uma tentativa anterior de vinculação falhou.

Existe uma maneira de dizer ao SDCC para suprimir a saída ihx quando há uma referência indefinida durante a vinculação?Se não, qual é a melhor solução alternativa? (já pensei em um).

Além disso, estou interessado em por que O SDCC foi projetado desta forma, se alguém souber.

Aqui está um exemplo do problema:

Você tem um arquivo chamado test.c que chama uma função indefinida:

void foo();
void main()
{
    foo();
}

Você tem um Makefile simples para construir um test.ihx a partir de test.c:

test.ihx: test.c
    sdcc test.c

Você tenta compilar test.c pela primeira vez e falha:

C:\test>make
sdcc test.c

?ASlink-Warning-Undefined Global '_foo' referenced by module 'test'
make: *** [test.ihx] Error 1

Você tenta corrigir o problema alterando algo que não é uma dependência do ihx (como o Makefile) e tenta compilar novamente:

C:\test>make
make: `test.ihx' is up to date.

Mas make não tenta compilá-lo porque o SDCC já criou o arquivo ihx.

Foi útil?

Solução

Não sei nada sobre sdcc, então lamento não poder responder às suas perguntas sobre se a saída pode ser suprimida ou por que o sdcc foi projetado dessa forma.

Posso pensar em uma solução alternativa:Renomeie o arquivo ihx após uma compilação bem-sucedida e use o novo nome como destino de criação.

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