尝试为 lex 程序创建 makefile

Trying to create makefile for lex program

注意,我是 "makefile"

的新手

我有一个名为 "ba.lex" 的程序,我需要为它创建 make 文件。

没有makefile,我先调用:

flex ba.lex

然后,我创建可执行文件:

gcc -o ba lex.yy.c -lfl

我还需要清理中间文件:lex.yy.c

我如何将这些放在 makefile 中。

更新: 我试过这个:

flex ba.lex
gcc -o ba lex.yy.c -lfl

但我得到:makefile:1: *** commands commence before first target. Stop.

Makefile 中,您不只是编写 命令 ,这就是 shell 脚本的用途。 Makefile 有 3 个主要实体:

  • 目标
  • 依赖关系
  • 命令 运行

一个非常简单的Makefile例子可以是这个:

build: a.out

a.out: a.c
 <TAB> gcc -Wall a.c

这里,build 是一个依赖于 a.out 的目标(这是一个文件,但我们也创建了一个具有该名称的目标)。目标 a.out 取决于 a.c 文件。当你 运行 make 是:

时会发生什么
if (! file_exists(a.out) || last_change(a.out) < last_change(a.c)) then
    execute gcc command

在您的情况下,可能的 Makefile 可以是:

build: ba

ba: lex.yy.c
 <TAB> gcc -o ba lex.yy.c -lfl

lex.yy.c: ba.lex
 <TAB>  flex ba.lex

clean: 
 <TAB> rm lex.yy.c ba *.o