语法规则
目标 ... : 依赖 ...命令1命令2. . .
1、目标即要生成的文件。如果目标文件的更新时间晚于依赖文件更新时间,则说明依赖文件没有改动,目标文件不需要重新编译。否则会进行重新编译并更新目标文件。
2、默认情况下Makefile的第一个目标为终极目标。
3、依赖:即目标文件由哪些文件生成。
4、命令:即通过执行命令由依赖文件生成目标文件。注意每条命令之前必须有一个tab保持缩进,这是语法要求(会有一些编辑工具默认tab为4个空格,会造成Makefile语法错误)。
5、all:Makefile文件默认只生成第一个目标文件即完成编译,但是我们可以通过all 指定所需要生成的目标文件。
常用指令
- 获取系统名字:
- UNAME := $(shell uname) 对于Linux,它可能返回"Linux",对于Mac OS,它可能返回"Darwin"
- OSNAME := $(shell ver) 命令的输出是 “Microsoft Windows [Version 10.0.19041.867]”
- 打印输出变量 @echo “Flags: $(CFLAGS)”
- find . -maxdepth 10 -type d 从当前目录搜索所有子级目录(搜素深度为10级),-type d表示只查找目录。
报错以及解决
注意 win系统下要在vscode 中的git bash下进行编译。
- “XXX is up to date”问题的解决办法 删除曾经makefile生成的文件。