2009-06-16 16 views
49

Estoy buscando una opción para gcc que hará que lea un archivo fuente desde la entrada estándar, principalmente para que yo pueda hacer algo como esto para generar un archivo de objeto de una herramienta como flex que genera código C (flex 's -t opción escribe el C generada en la salida estándar):¿Es posible obtener gcc para leer desde una tubería?

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

porque realmente no importa el archivo C generado.

¿Existe algo como esto, o tengo que usar archivos temporales?

+1

El archivo C generado es bueno tener cerca si alguna vez necesita depurar ese código. – laalto

+2

@laalto: Ese es un buen punto, pero el código que genera flex no es muy legible por humanos de todos modos. – Zifre

Respuesta

58

Sí, pero tiene que especificar el idioma con la opción -x:

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

Pensé que podría ser - (muchas otras herramientas lo usan), pero no pude encontrar nada al respecto en la página del manual ... – Zifre

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

Básicamente dicen que el nombre del archivo es - que especifica que un nombre de archivo es - es una convención algo estándar para decir " entrada estándar '. También quiere la bandera -c para que no esté haciendo enlaces. Y cuando gcc lee desde la entrada estándar, debe indicarle en qué idioma es -x. -x c dice que es código C.

+0

Sé lo que es -c, simplemente lo dejé por simplicidad (porque tengo muchas otras opciones en flex y gcc también). – Zifre

Cuestiones relacionadas