2012-01-27 12 views

risposta

15

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.

+0

Funziona perfettamente! Grazie! – alesko

+0

@alesko Prego! – ouah

+0

il mio compilatore basato su gcc salva solo il file '.s' – Adrian

5

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.

+0

Grazie per le informazioni dettagliate! – alesko

Problemi correlati