我正在学习 flex 并且(真的是第一次)使用命令行。
我创建了一个 Makefile 来简化我的测试过程,但我不明白为什么命令是相反的。
例如,在终端中的顺序是这样的:
flex test.l
Run Code Online (Sandbox Code Playgroud)
这将创建文件 lex.yy.c
然后我编译:
g++ lex.yy.c -ll -o test
Run Code Online (Sandbox Code Playgroud)
Makefile 逆向读取:
test: lex.yy.c
g++ lex.yy.c -ll -o test
lex.yy.c: test.l
flex test.l
Run Code Online (Sandbox Code Playgroud)
那么当我跑步时会发生什么make
?
Makefile 遵循此格式(Makefile 应始终使用制表符而不是空格,因为它在 的大多数(如果不是全部)实现中是必需的make
):
target: dependencies
operations to build target
Run Code Online (Sandbox Code Playgroud)
make
您在不带参数的情况下调用它时尝试构建的目标。在此 Makefile 中,您有两个目标:
由于lex.yy.c
是 build 所需的依赖项test
,因此它将首先从test.l
. 生成后就可以编译了test
。基本上,make
...:
test
.lex.yy.c
不存在(或已更新),需要先构建。lex.yy.c
。运行flex test.l
:lex.yy.c
已构建。test
满足所有依赖关系。运行g++ lex.yy.c -ll -o test
。test
被建造。附加信息:有关生成文件的更多信息,我建议Linux开发平台由Rafeeq乌尔拉赫曼。第 4 章:使用 GNU Make。