Domanda

Il piccolo dispositivo C Compiler (SDCC) produrrà un file IHX (Intel Hex) anche se ci sono errori di riferimento indefiniti durante la fase di collegamento. Questo comportamento causa problemi quando si utilizza SDCC in un Makefile perché se si imposta il file IHX per essere il tuo obiettivo, allora non ha un buon modo per sapere che un precedente tentativo di collegamento è fallito.

C'è un modo per informare SDCC di sopprimere l'uscita IHX quando c'è un riferimento indefinito durante il collegamento? Se no, qual è la soluzione migliore? (ho già pensato a uno).

Inoltre, sono interessato a Perché SDCC è stato progettato in questo modo se qualcuno lo sa.

Ecco un esempio del problema:

Hai un file chiamato test.c che chiama una funzione indefinita:

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

Hai un semplice makefile per la costruzione di un test.ihx da test.c:

test.ihx: test.c
    sdcc test.c
.

si tenta di compilare Test.C per la prima volta e fallisce:

C:\test>make
sdcc test.c

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

Provi a risolvere il problema modificando qualcosa che non è una dipendenza dell'IHX (come il MakeFile) e prova a compilare di nuovo:

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

Ma rendi non prova a compilarlo perché SDCC ha già creato il file IHX.

È stato utile?

Soluzione

Non so nulla di SDCC, quindi mi dispiace di non posso rispondere alle tue domande riguardo se l'uscita può essere soppressa o perché SDCC è stato progettato in questo modo.

Posso pensare a un work-around: Rinominare il file IHX dopo una build di successo e utilizzare il nuovo nome come Target crea.

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