Is it possible to get GCC to read from a pipe?
I'm looking for an option to gcc
that will make it read a source file from the standard input, mainly so I could do something like this to generate an object file from a tool like flex
that generates C code (flex
's -t
option writes the generated C to the standard output):
flex -t lexer.l | gcc -o lexer.o -magic-option-here
because I don't really care about the generated C file.
Does something like this exist, or do I have to use temporary files?
Solution 1:
Yes, but you have to specify the language using the -x
option:
# Specify input file as stdin, language as C
flex -t lexer.l | gcc -o lexer.o -xc -
Solution 2:
flex -t lexer.l | gcc -x c -c -o lexer.o -
Basically you say that the filename is -
. Specifying that a filename is -
is a somewhat standard convention for saying 'standard input'. You also want the -c
flag so you're not doing linking. And when GCC reads from standard input, you have to tell it what language this is with -x
. -x c
says it's C code.