可以让GCC从管道中读取数据吗?

可以让GCC从管道中读取数据吗?,gcc,command-line,pipe,flex-lexer,Gcc,Command Line,Pipe,Flex Lexer,我正在寻找一个gcc选项,该选项将使它从标准输入中读取源文件,主要是为了从生成C代码的flex工具中生成一个对象文件(flex的-t选项将生成的C写入标准输出): 因为我并不真正关心生成的C文件 是否存在类似的内容,或者我必须使用临时文件?是,但必须使用-x选项指定语言: # Specify input file as stdin, language as C flex -t lexer.l | gcc -o lexer.o -xc - 基本上你说文件名是-。指定文件名为-是表示“标准输入”的

我正在寻找一个
gcc
选项,该选项将使它从标准输入中读取源文件,主要是为了从生成C代码的
flex
工具中生成一个对象文件(
flex
-t
选项将生成的C写入标准输出):

因为我并不真正关心生成的C文件


是否存在类似的内容,或者我必须使用临时文件?

是,但必须使用
-x
选项指定语言:

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

基本上你说文件名是
-
。指定文件名为
-
是表示“标准输入”的标准约定。您还需要
-c
标志,以便不进行链接。当GCC从标准输入读取时,您必须告诉它这是什么语言<代码>-x c表示它是c代码。

如果您需要调试代码,生成的c文件很好就放在身边。@laalto:这是一个很好的观点,但flex生成的代码无论如何都不是很容易让人读懂的。我想它可能是-(许多其他工具使用它),但我在手册页中找不到任何关于它的信息……注意,2019年这里,这最近违反了gcc 8.2.1。它现在将在从管道读取时挂起。@ToddFred:假设生成源文件的进程正确地关闭了其输出,那么这听起来像是GCC中的错误。如果您有一个可复制的测试用例,我建议您向GCC维护人员报告。非常好!谢谢我知道-c是什么,为了简单起见,我把它省略了(因为我在flex和gcc上也有很多其他选项)。
# Specify input file as stdin, language as C
flex -t lexer.l | gcc -o lexer.o -xc -
flex -t lexer.l | gcc -x c -c -o lexer.o -