一
(一).规则
target:prerequisites.....
(tab)command
(tab) ......
(tab) ......
clean:
(tab)command
注:命令command前面一定要加一个tab键,命令过多可以用反斜杠“\”表示换行。
3.command:make需要执行的命令,可以是任意的shell命令
(二).例
3:3.o
gcc -o 3 3.o
3.o:3.c 3.h
gcc -c 3.c
clean:
rm 3.o
(三).make工作过程
在当前目录下需找makefile或Makefile
|
∨
找到第一个target,作为最终目标
|
∨
如果target不存在或者后面依赖的文件要比target新,执行后面的命令生成target
|
∨
如果target所依赖的文件也存在,寻找生成依赖文件的依赖文件,根据规则生成target所依赖的文件
|
∨
如果所有文件都存在,生成target所依赖的文件,再生产target,得到最终目标
1.找不到依赖文件:make直接退出并报错
2.命令错误或编译不成功:make无反应
3.make只管文件的依赖性
(四).makefile中使用的变量
声明一个变量:objects,OBJECTS,objs,OBJS,obj,OBJ
例:
objects = 3.o
3:objects
gcc -o 3 objects
3.o:3.c 3.h
gcc -c 3.c
clean:
rm objects
objects可以是objects = 1.o 2.o 3.o
(五).让make自动推导(隐晦规则)
例:
gcc -o 3 objects
3.o:3.c 3.h
-----------把原来的这一行命令删除,make自动推导出来
clean:
rm objects
(六).另类风格的makefile
把依赖文件和目标文件收拢起来
例
objects = main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
edit : $(objects)
kbd.o : defs.h command.h
command.o : defs.h command.h
display.o : defs.h buffer.h
insert.o : defs.h buffer.h
search.o : defs.h buffer.h
files.o : defs.h buffer.h command.h
utils.o : defs.h
.PHONY : clean
clean :
rm edit $(objects)
|
∨
objects = main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
edit : $(objects)
cc -o edit $(objects)
$(objects) : defs.h
kbd.o command.o files.o : command.h
display.o insert.o search.o files.o : buffer.h
.PHONY : clean
clean :
rm edit $(objects)
(七).清空目标文件的规则
一般风格:
clean:
rm edit ¥(objects)
更稳健的做法:
.PHONY:clean
clean:
-rm edit ¥(objects)
来自《跟我一起写Makefile》
(一).规则
target:prerequisites.....
(tab)command
(tab) ......
(tab) ......
clean:
(tab)command
注:命令command前面一定要加一个tab键,命令过多可以用反斜杠“\”表示换行。
1.target:目标文件(可以是目标文件(object file),可以是可执行文件(Executable file),可以是标签(Lable))
3.command:make需要执行的命令,可以是任意的shell命令
makefile核心内容:如果 所需要的文件或者目标 比 target文件 新的 或者target不存在的话,command将会被执行。
(二).例
3:3.o
gcc -o 3 3.o
3.o:3.c 3.h
gcc -c 3.c
clean:
rm 3.o
(三).make工作过程
在当前目录下需找makefile或Makefile
|
∨
找到第一个target,作为最终目标
|
∨
如果target不存在或者后面依赖的文件要比target新,执行后面的命令生成target
|
∨
如果target所依赖的文件也存在,寻找生成依赖文件的依赖文件,根据规则生成target所依赖的文件
|
∨
如果所有文件都存在,生成target所依赖的文件,再生产target,得到最终目标
1.找不到依赖文件:make直接退出并报错
2.命令错误或编译不成功:make无反应
3.make只管文件的依赖性
(四).makefile中使用的变量
声明一个变量:objects,OBJECTS,objs,OBJS,obj,OBJ
例:
objects = 3.o
3:objects
gcc -o 3 objects
3.o:3.c 3.h
gcc -c 3.c
clean:
rm objects
objects可以是objects = 1.o 2.o 3.o
(五).让make自动推导(隐晦规则)
例:
objects = 3.o
3:objectsgcc -o 3 objects
3.o:3.c 3.h
-----------把原来的这一行命令删除,make自动推导出来
clean:
rm objects
(六).另类风格的makefile
把依赖文件和目标文件收拢起来
例
objects = main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
edit : $(objects)
cc -o edit $(objects)
kbd.o : defs.h command.h
command.o : defs.h command.h
display.o : defs.h buffer.h
insert.o : defs.h buffer.h
search.o : defs.h buffer.h
files.o : defs.h buffer.h command.h
utils.o : defs.h
.PHONY : clean
clean :
rm edit $(objects)
|
∨
objects = main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
edit : $(objects)
cc -o edit $(objects)
$(objects) : defs.h
kbd.o command.o files.o : command.h
display.o insert.o search.o files.o : buffer.h
.PHONY : clean
clean :
rm edit $(objects)
(七).清空目标文件的规则
一般风格:
clean:
rm edit ¥(objects)
更稳健的做法:
.PHONY:clean
clean:
-rm edit ¥(objects)
来自《跟我一起写Makefile》