使用make
一、概述:
make是一个解释makefile文件中的指令的命令工具。
makefile带来的好处是---自动化编译。
make文件的操作规则:
1 如果工程没有编译过,所有C文件都要被编译并连接。
2 如果工程中某几个C文件被修改,则编译修改的C文件并连接。
3 如果工程的头文件被修改了,需要编译引用这些头文件的所有C文件并连接。
make是通过判断目标文件和目标文件的依赖文件的最后修改时间决定是否重新编译目标文件,如果依赖文件的修改时间晚于目标文件,则目标文件需要重新编译。
makefile文件基本格式:
target ... : prerequisites ...
(Tab)command
...
...
二、makefile实例
1 下面是一个普通makefile的实例
-------------------------------------------
edit : main.o command.o display.o
gcc -o edit main.o command.o display.o
main.o : main.c
gcc -c main.c
command.o : command.c command.h
gcc -c command.c
display.o : display.c display.h
gcc -c display.c
-------------------------------------------
说明:
a command行要以tab开始。
b make会在当前目录下找名字为makefile的文件或在makefile文件夹的文件。
2 在makefile文件中使用变量
-------------------------------------------
objects = main.o command.o display.o
edit : $(objects)
gcc -o edit $(objects)
main.o : main.c
gcc -c main.c
command.o : command.c command.h
gcc -c command.c
display.o : display.c display.h
gcc -c display.c
-------------------------------------------
说明:
a makefile文件中可以使用变量,就是一个字符串,可以理解为C语言中的宏。
b 使用$(objects)的方式来使用定义的变量。
3 让make自动推导依赖关系
-------------------------------------------
objects = main.o command.o display.o
edit : $(objects)
gcc -o edit $(objects)
main.o :
command.o : command.h
display.o : display.h
-------------------------------------------
说明:
由上例可见,目标文件的生成可以省略.c文件和编译命令。
4 另类风格的makefile
不推荐使用,比较凌乱。
5 清空目标文件规则
每个makefile文件都应该有一个清空目标文件(.o文件和执行文件)的规则。
-------------------------------------------
objects = main.o command.o display.o
edit : $(objects)
gcc -o edit $(objects)
main.o : main.c
gcc -c main.c
command.o : command.c command.h
gcc -c command.c
display.o : display.c display.h
gcc -c display.c
clean :
rm edit $(objects)
-------------------------------------------
更稳健的做法是:
-------------------------------------------
objects = main.o command.o display.o
edit : $(objects)
gcc -o edit $(objects)
main.o : main.c
gcc -c main.c
command.o : command.c command.h
gcc -c command.c
display.o : display.c display.h
gcc -c display.c
.PHONY : clean
clean :
-rm edit $(objects)
rm edit $(objects)
-------------------------------------------
阅读(1164) | 评论(0) | 转发(0) |