0
点赞
收藏
分享

微信扫一扫

1.10~1.12 Makefile


01 什么是Makefile

1.10~1.12 Makefile_模式匹配

02 Makefile规则

1.10~1.12 Makefile_Linux_02


版本一

app:sub.c add.c mult.c div.c main.c
gcc sub.c add.c mult.c div.c main.c -o app

版本二

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

第二个版本编写更麻烦,但是更新依赖文件的时候,不需要全部重新编译

03 工作原理

1.10~1.12 Makefile_重新编译_03


04 变量

1.10~1.12 Makefile_Linux_04

#定义变量
src=sub.o add.o mult.o div.o main.o
target=app
$(target):$(src)
$(CC) $(src) -o $(target)

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

有什么用:简化代码

05 模式匹配

1.10~1.12 Makefile_重新编译_05


再次优化

#定义变量
src=sub.o add.o mult.o div.o main.o
target=app
$(target):$(src)
$(CC) $(src) -o $(target)

%.o:%.c
$(CC) -c $< -o $@



06 函数

1.10~1.12 Makefile_C++_06


1.10~1.12 Makefile_Linux_07

#定义变量
# add sub.o add.o mult.o div.o main.o
src=$(wildcard ./*.c)
objs=$(patsubst %.c, %.o, $(src))
target=app
$(target):$(objs)
$(CC) $(objs) -o $(target)

%.o:%.c
$(CC) -c $< -o $@

#定义变量
# add sub.o add.o mult.o div.o main.o
src=$(wildcard ./*.c)
objs=$(patsubst %.c, %.o, $(src))
target=app
$(target):$(objs)
$(CC) $(objs) -o $(target)

%.o:%.c
$(CC) -c $< -o $@

#删除.o中间文件
.PHONY:clean #指定不会生成文件
clean:
rm $(objs) -f

1.10~1.12 Makefile_Linux_08


举报

相关推荐

0 条评论