Pregunta

El compilador de Dispositivo CA pequeño (SDCC) producirá un archivo IHX (Intel HEX) incluso si hay errores de referencia indefinidos durante la etapa de enlace. Este comportamiento causa problemas al usar SDCC en un makefile porque si configura el archivo IHX para que sea su objetivo, haga que no tenga una buena manera de saber que un intento anterior de enlace ha fallado.

¿Hay una manera de decirle a SDCC que suprima la salida IHX cuando hay una referencia indefinida durante la vinculación? Si no, ¿cuál es la mejor solución? (ya pensé en uno).

también, estoy interesado en por qué SDCC fue diseñado de esta manera si alguien sepa.

aquí es un ejemplo del problema:

Usted tiene un archivo llamado test.c que llama una función indefinida:

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

Tienes un makefile simple para construir un test.ihx de test.c:

test.ihx: test.c
    sdcc test.c

Intenta compilar test.c por primera vez y falla:

C:\test>make
sdcc test.c

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

Intenta solucionar el problema cambiando algo que no es una dependencia del IHX (como el Makefile), e intente compilar nuevamente:

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

Pero hago no intenta compilarlo porque SDCC ya creó el archivo IHX.

¿Fue útil?

Solución

No sé nada sobre SDCC, por lo que lamento no poder responder sus preguntas sobre si la salida se puede suprimir o por qué se diseñó SDCC de esa manera.

Puedo pensar en un trabajo: cambie el nombre del archivo IHX después de una construcción exitosa y use el nuevo nombre como el objetivo de HACK.

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