2009-06-16 5 views
49

Sto cercando un'opzione a gcc che consentirà di leggere un file di origine dall'input standard, principalmente in modo che io possa fare qualcosa del genere per generare un file oggetto da uno strumento come flex che genera codice C (flex's -t opzione scrive il C generato sullo standard output):È possibile ottenere gcc per leggere da una pipe?

flex -t lexer.l | gcc -o lexer.o -magic-option-here 

perché non mi preoccupo per il file C generato.

Esiste qualcosa del genere oppure devo utilizzare file temporanei?

+1

Il file C generato è buono da avere in giro se è necessario eseguire il debug di quel codice. – laalto

+2

@laalto: Questo è un buon punto, ma il codice generato da flex non è comunque molto leggibile. – Zifre

risposta

58

Sì, ma è necessario specificare la lingua utilizzando l'opzione -x:

# Specify input file as stdin, language as C 
flex -t lexer.l | gcc -o lexer.o -xc - 
+1

Ho pensato che potrebbe essere - (molti altri strumenti lo usano), ma non ho trovato nulla al riguardo nella pagina man ... – Zifre

16
flex -t lexer.l | gcc -x c -c -o lexer.o - 

In sostanza si dice che il nome del file è - specifica che il nome del file è - è una convenzione in qualche modo standard per dire ' input standard '. Vuoi anche il flag -c così non stai facendo il collegamento. E quando gcc legge dallo standard input, devi dire quale linguaggio è con -x. -x c dice che è il codice C.

+0

So cosa -c è, l'ho appena lasciato fuori per semplicità (perché ho molte altre opzioni su flex e gcc). – Zifre