Is it possible to get GCC to read from a pipe?

GccCommand LinePipeFlex Lexer

Gcc Problem Overview


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?

Gcc Solutions


Solution 1 - Gcc

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 - Gcc

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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionZifreView Question on Stackoverflow
Solution 1 - GccAdam RosenfieldView Answer on Stackoverflow
Solution 2 - GccnosView Answer on Stackoverflow