【问题标题】:Is it possible to get GCC to read from a pipe?是否可以让 GCC 从管道中读取?
【发布时间】:2010-11-03 11:16:32
【问题描述】:

我正在寻找gcc 的选项,这将使它从标准输入读取源文件,主要是这样我可以做这样的事情来从像flex 这样生成C 的工具生成目标文件代码(flex-t选项将生成的C写入标准输出):

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

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

这样的东西是否存在,还是我必须使用临时文件?

【问题讨论】:

  • 如果您需要调试该代码,生成的 C 文件非常适合。
  • @laalto:这是一个很好的观点,但是 flex 生成的代码无论如何都不是人类可读的。

标签: gcc command-line pipe flex-lexer


【解决方案1】:

可以,但您必须使用-x 选项指定语言:

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

【讨论】:

  • 我认为它可能是 - (许多其他工具都使用它),但我在手册页中找不到任何关于它的信息...
  • 请注意,在 2019 年,这最近与 gcc 8.2.1 中断。它现在会在从管道读取时挂起。
  • @ToddFreed:假设生成源文件的进程正确地关闭了它的输出,那么这听起来像是 GCC 中的一个错误。如果你有一个可重现的测试用例,我建议你向 GCC 维护者报告。
  • 太棒了!谢谢!
【解决方案2】:
flex -t lexer.l | gcc -x c -c -o lexer.o -

基本上你说文件名是-。将文件名指定为- 是说“标准输入”的某种标准约定。您还需要 -c 标志,因此您不进行链接。当 GCC 从标准输入中读取时,你必须用 -x 告诉它这是什么语言。 -x c 说是 C 代码。

【讨论】:

  • 我知道 -c 是什么,为了简单起见,我把它省略了(因为我在 flex 和 gcc 上也有很多其他选项)。
猜你喜欢
  • 1970-01-01
  • 2021-01-21
  • 1970-01-01
  • 1970-01-01
  • 2016-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多