Flex 多个 .l 文件参数不起作用? (例如"flex a.l b.l")

Flex multiple .l file arguments don't work? (eg "flex a.l b.l")

我终于有了一个足够舒适的工作流程来编写我的 flex 程序,我很快就会 bison 投入其中(我之前涉足过它,但我完全重新启动了我的项目)。

flex yy.l; flex flip.l 将正确生成 lex.yy.clex.flip.c,因为我使用了前缀选项。但我很好奇为什么 flex yy.l flip.lflex *.l 没有。

gcc lex* 在正确生成所有 .c 文件时似乎工作得很好,就像第一个命令一样,但是尝试使用 flex 的相同快捷方式会生成一个 lex.yy.c 文件,这似乎是有效的直到未处理的 flip.l 文件粘贴到最后,阻止 gcc 编译。

这只是 flex 告诉我我的工作流程很愚蠢,我应该在大文件中使用更多的启动条件吗?我宁愿不要,至少在我有一个更完整的程序来调整速度之前。

我的工作流程是:

fg 1; fg 2; fg 3; fg 4; flex a.l; flex flip.l; flex rot.l; gcc -g lex*; ./a.out < in

nano 编辑作为作业 1、2、3、4 到 fg 退出后台。

我按以下顺序对文件进行词法分析:fliprotarotflip。它有效,我什至可以使用预处理器定义 gcc -DALONE 单独正确编译我的 .c 文件,以进行测试。

我认为 flex 告诉您的,如果有的话,是学习如何使用 make 而不是试图将大量构建命令放在一起。

的确,flex 每次调用只会处理一个文件。另一方面,gcc 和 clang 都是调用实际编译器和链接器的简单驱动程序,因此您不必编写更复杂的构建方法。您可以轻松地编写一个小的驱动程序多次调用 flex,每个参数调用一次,但使用 make 会更简单,另外一个优点是 flex 只会在必要时调用。

事实上,大多数大型 C 项目并没有使用 gcc 在一次调用中编译多个文件的能力。相反,他们让 make 找出需要重建的目标文件(因为相应的源文件已更改),从而大大加快了 debug/edit/build 周期。