我正在学习 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。