È possibile generare output e compilazione del preprocessore in un solo passaggio con GCC?Uscita e compilazione del preprocessore GCC in un passaggio
Qualcosa di simile:
gcc -E -c main.cc -o main.o
che avrebbe generato main.o e main.i
È possibile generare output e compilazione del preprocessore in un solo passaggio con GCC?Uscita e compilazione del preprocessore GCC in un passaggio
Qualcosa di simile:
gcc -E -c main.cc -o main.o
che avrebbe generato main.o e main.i
Sì.
Vedere gcc
-save-temps
opzione.
Compila il file sorgente e salva il risultato della preelaborazione in un file .i
. (Salva anche il risultato della fase assemblatore in un file .s
).
gcc -save-temps -c main.cc -o main.o
genererà main.o
ma anche main.i
e main.s
.
main.i
è il risultato del preelaborazione.
No, non con -E
per sé, le opzioni -s
, -c
e -E
sono chiamati opzioni di "STOP". In realtà fermano il processo in un punto specifico in modo da non poter andare avanti.
Se si desidera farlo, è necessario farlo in due passaggi oppure utilizzare -save-temps
per conservare copie dei file temporanei normalmente eliminati durante la compilazione.
Dal gcc
pagina di manuale, roba discutendo -E
(un po 'parafrasato):
Se desideri solo alcune delle fasi di compilazione, è possibile utilizzare -x (o nome del file suffissi) per dire a gcc da dove cominciare e una delle opzioni -c, -S, o -E per dire dove gcc deve fermarsi. Nota che alcune combinazioni (ad esempio, -x cpp-output -E) istruiscono gcc a non fare nulla.
-E significa: arresto dopo la fase di pre-elaborazione; non eseguire correttamente il compilatore. L'output è sotto forma di codice sorgente preelaborato, che viene inviato all'output standard (o al file di output se è specificato -o).
Se si utilizza l'opzione -E, non viene eseguito nulla tranne la pre-elaborazione.
e una descrizione del -save-temps
:
-save-temps
Conservare le solite file intermedi "temporanei" permanentemente; metterli nella directory corrente e nominarli in base al file sorgente.
Pertanto, la compilazione di foo.c con -c -save-temps produrrebbe i file foo.i e foo.s, così come foo.o.
Questo crea un file di output preelaborato foo.i anche se il compilatore ora utilizza normalmente un preprocessore integrato.
Grazie per le informazioni dettagliate! – alesko
Funziona perfettamente! Grazie! – alesko
@alesko Prego! – ouah
il mio compilatore basato su gcc salva solo il file '.s' – Adrian