makefile格式
makefile 中的我其他命令一般都是为第一行服务的
目标 ... : 依赖...
命令(shell)
文件的名字要为 Makefile ,放在当前项目文件夹中。
makefile1
app : sub.c add.c mult.c div.c main.c
gcc sub.c add.c mult.c div.c main.c -o app
makefile2
app : sub.o add.o mult.o div.o main.o
gcc sub.o add.o mult.o div.o main.o -o app
sub.o : sub.c
gcc -c sub.c -o sub.o
add.o : add.c
gcc -c add.c -o add.o
mult.o : mult.c
gcc -c mult.c -o mult.o
div.o : div.c
gcc -c div.c -o div.o
main.o : main.c
gcc -c main.c -o main.o
这个规则可以记录更新时间,在编译过一次后,如果只修改了某一个.c文件,那么再次编译时只会对这个新修改的编译
makefile3
变量
1.自定义变量
变量名=变量值
var=hello
# 获取变量的值
$(var)
2.预定义变量
AR :归档维护程序的名称,默认值为 ar
CC:C编译器的名称,默认值为 cc
CXX:C++编译器的名称,默认值为 g++
$@:目标的完整名称
$<:第一个依赖文件的名称
$^:所有的依赖文件
app : main.c a.c b.c
gcc -c main.c a.c b.c -o app
# 自动变量只能在规则的命令中使用
app : main.c a.c b.c
$(CC) -c $^ -o $@
模式匹配
%.o : %.c
// % : 通配符,匹配一个字符串
两个%匹配的时同一个字符串
%.o : %.c
gcc -c $< -o $@
#定义变量
src=sub.o add.o mult.o div.o main.o
target=app
$(target) :$(src)
$(CC) $(src) -o $(target)
%.o:%.c # 统配一下所有的那几个 .o文件
$(CC) -c $< -o $@