文件编写好以后在Linux命令行中执行一条make命令即可自动编译整个工程。
1、Makefile的参数
1.目标:即要生成的文件。
2.依赖:即目标文件由哪些文件生成。
3.命令:即通过执行命令由依赖文件生成目标文件。
4.all:Makefile文件默认只生成第一个目标文件即完成编译,但是可以通过all 指定所需要生成的目标文件。
Makefile中,目标(Target)和依赖(Dependency)是通过规则(Rule)来表达的。
前面必须要有一个“Tab”
2、Makefile的假目标
假目标采用.PHONY关键字来定义
.PHONY:clear
clear:
rm obj/*.o
rm bin/*
运行则是make clear,作用是删除obj目录下的.o文件(目标文件,Object File)和bin目录下的可执行文件,方便更新。
3、Makefile变量
3-1、自动变量
$@用来表示一个规则中的目标。当一个规则中有多个目标时。
$@所指的是其中任何造成命令被执行的目标。
$^则表示对是规则中所有的选择条件(依赖文件)
$<表示对是规则中的第一个先决条件(依赖文件)
3-2、预定义变量
CC C编译器的名称,默认为cc
CPP C预编译器的名称,默认为$(CC)-E
RM 文件删除程序的名称,默认值为rm -f
4、一个程序的文件夹分层
bin:存放可执行文件
obj:存放.o文件(目标文件)
src:存放.c文件(源码)
include:存放.h文件(头文件)
Makefile
5、一个完整的项目的Makefile编写
Makefile:外层的大Makefile
ALL:
make -C src/
make -C obj/
.PHONY:clear
clear:
rm obj/*.o
rm bin/*
scr/Makefile: 由源代码生成目标文件 ,由gcc -c $< -o $@
ALL:../obj/iclient.o ../obj/log_reg_menu.o ../obj/c_regist_login.o ../obj/sys_menu.o ../obj/function.o
../obj/iclient.o:iclient.c
gcc -c $< -o $@
../obj/log_reg_menu.o:log_reg_menu.c
gcc -c $< -o $@
../obj/c_regist_login.o:c_regist_login.c
gcc -c $< -o $@
../obj/sys_menu.o:sys_menu.c
gcc -c $< -o $@
../obj/function.o:function.c
gcc -c $< -o $@
obj/Makefile:链接所有目标文件生成bin目录下的可执行文件
ALL:
gcc *.o -o ../bin/app