make在执行时,需要一个命名为Makeflie的文件,该文件描述了整个工程的编译,链接规则。
makefile的目的:产生一个或多个目标文件,但最终目标文件只有一个。
注意:每一个命令行的首字符必须是Tab制表符,不可以用空格代替
在makeflie文件里,每一段都是一个规则
规则的顺序很重要,makefile只有一个最终目标
第一条规则中的目标将被确立为最终目标(即使每条规则都有各自的目标)
规则格式:(目标,依赖,命令)
target:dependency_file1 dependency_file2 ...
[tab键] command1 (命令要以[Tab]开头)
command2
[...]
变量:
作用:编写大型程序时的makefile涉及的依赖文件和规则会很多,
变量可以简化makeflie的编写,提高可读性,使其思路清晰,容易更改
makeflie里的变量一帮用大写,并用等于号为其赋值。:OBJECT=hello.o
变量的引用格式为$(变量名),如:$(OBJECT)
"#"井号后面的内容为注释内容
#一个简单的malefice文件
OBJECT=printer.o shape.o op_lib.o
HEADER=printer.h shape.h op_lib.h
printer:$(OBJECT)
gcc -o printer $(OBJECT)
printer.o:printer.c $(HEADER)
gcc -c printer.c
shape.o:shape.c shape.h
gcc -c shape.c
op_lib.o:op_lib.c op_lib.h
gcc -c op_lib.c
.PHONY:clean
clean:
rm printer*.o
makefile的目的:产生一个或多个目标文件,但最终目标文件只有一个。
注意:每一个命令行的首字符必须是Tab制表符,不可以用空格代替
在makeflie文件里,每一段都是一个规则
规则的顺序很重要,makefile只有一个最终目标
第一条规则中的目标将被确立为最终目标(即使每条规则都有各自的目标)
规则格式:(目标,依赖,命令)
target:dependency_file1 dependency_file2 ...
[tab键] command1 (命令要以[Tab]开头)
command2
[...]
变量:
作用:编写大型程序时的makefile涉及的依赖文件和规则会很多,
变量可以简化makeflie的编写,提高可读性,使其思路清晰,容易更改
makeflie里的变量一帮用大写,并用等于号为其赋值。:OBJECT=hello.o
变量的引用格式为$(变量名),如:$(OBJECT)
"#"井号后面的内容为注释内容
#一个简单的malefice文件
OBJECT=printer.o shape.o op_lib.o
HEADER=printer.h shape.h op_lib.h
printer:$(OBJECT)
gcc -o printer $(OBJECT)
printer.o:printer.c $(HEADER)
gcc -c printer.c
shape.o:shape.c shape.h
gcc -c shape.c
op_lib.o:op_lib.c op_lib.h
gcc -c op_lib.c
.PHONY:clean
clean:
rm printer*.o