1 #sample Makefile 2 edit : main.o kbd.o command.o display.o 3 insert.o search.o files.o utils.o 4 cc -o edit main.o kbd.o command.o display.o 5 insert.o search.o files.o utils.o 6 main.o : main.c defs.h 7 cc -c main.c 8 kbd.o : kbd.c defs.h command.h 9 cc -c kbd.c 10 command.o : command.c defs.h command.h 11 cc -c command.c 12 display.o : display.c defs.h buffer.h 13 cc -c display.c 14 insert.o : insert.c defs.h buffer.h 15 cc -c insert.c 16 search.o : search.c defs.h buffer.h 17 cc -c search.c 18 files.o : files.c defs.h buffer.h command.h 19 cc -c files.c 20 utils.o : utils.c defs.h 21 cc -c utils.c 22 clean : 23 rm edit main.o kbd.o command.o display.o 24 insert.o search.o files.o utils.o
示例Makefile如上
1、将一个较长的行使用反斜线(\)来分解多行,这样可以使我们的Makefile书写清晰、容易阅读理解。但需要注意:反伯斜线之后不能有空格(这也是大家最容易犯的错误,错误比较隐蔽)。
2、命令行定义了规则的动作(如何根据依赖文件来更新目标文件)。命令行必需以[Tab]字符开始,以和Makefile其他行区别。就是说所有的命令行必需以[Tab]字符开始,但并不是所有的以[Tab]键出现行都是命令行。但make程序会把出现在第一条规则之后的所有以[Tab]字符开始的行都作为命令行来处理。(记住:make程序本身并不关心命令是如何工作的,对目标文件的更新需要你在规则描述中提供正确的命令。 “make”程序所做的就是当目标程序需要更新时执行规则所定义的命令)
3、目标”clean“不是一个文件,它仅仅代表执行一个动作标识。正常情况下,不需要执行这个规则所定义的动作,因此目标”clean“没有出现在其它任何规则的依赖列表中。因此在执行make时,它所指定的动作不会被执行。除非在执行make时明确指定它。而且目标”clean“没有任何依赖文件,它只有一个目的,就是通过这个目标名来执行它所定义的命令。Makefile中把那些没有任何依赖只有执行动作的目标称为”伪目标“(Phony targets)。需要执行"clean"目标所定义的命令,可在shell下输入make clean
时间: 2024-12-15 07:41:04