这是一个makefile文件
hello: main.o func1.o func2.o
gcc main.o func1.o func2.o -o hello
main.o : main.c
gcc –c main.c
func1.o : func1.c
gcc –c func1.c
func2.o : func2.c
gcc –c func2.c
.PHONY : clean
clean :
rm –f hello main.o func1.o func2.o
makefile文件中一般存在很多的目标。但是第一个目标一般默认为是最终的目标。其它的目标都认为是中间目标。
hello: main.o func1.o func2.o
gcc main.o func1.o func2.o -o hello
这条语句中hello为目标,main.o func1.o func2.o为依赖文件,gcc main.o func1.o func2.o -o hello为执行语句
执行语句必须以TAB开头
.PHONY:clean 为伪目标,它只有执行动作,没有依赖目标,
执行make命令时,默认会在当前目录下找到makefile或者Makefile文件,也可以使用命令make -f filename 来指定名字不为makefile或Makefile的组织文件。
makefile中可以使用变量
比如
hello: main.o func1.o func2.o
gcc main.o func1.o func2.o -o hello
obj = main.o func1.o func2.o
hello: $(obj)
gcc $(obj) -o hello
makefile中存在系统默认的一些系统变量
比如:$^:代表目标的所有依赖文件$ @:代表目标
$<:代表第一个依赖文件
举例
hello: main.o func1.o func2.o
gcc main.o func1.o func2.o -o hello
可以用下面带变量的语句替换
hello: main.o func1.o func2.o
gcc $^ -o $ @