C语言学习笔记-写一个最简单的makefile

makefile思维导图

示例代码

最简单的 makefile

1
2
app: main.c add.c mul.c sub.c
	gcc main.c add.c mul.c sub.c -o app
  • 目标:生产名为 app 的可执行文件
  • 依赖:可执行文件通过 .c 文件生成
  • 命令:通过 gcc 命令生成

第一个版本的问题在于每次都需要编译所有的 .c 文件,如果想要修改哪个文件就只编译修改过的文件就可以这样那样写:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
app:main.o add.o mul.o sub.o
	gcc main.o add.o mul.o sub.o -o app

main.o:main.c
	gcc -c main.c

add.o:add.c
	gcc -c add.c

mul.o:mul.c
	gcc -c mul.c

sub.o:sub.c
	gcc -c sub.c
  • 目标:生成名为 app 的可执行文件
  • 依赖:预编译完成的 .o 文件
  • 命令:系列 gcc 命令

makefile的工作原理

makefile中的变量

1
2
3
4
5
6
7
8
obj=main.o add.o mul.o sub.o
target=app
CC=gcc
$(target):$(obj)
    gcc $(obj) -o $(target)
    
%.o:%.c
	$(CC) -c $< -o $@

%.o:%.c模式匹配

自动变量,只能在规则中的命令中使用

  • $<规则中第一个依赖
  • $@规则中的目标
  • $^规则中所有依赖

makefile中的函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
target=app
src=$(wildcard ./*.c)
obj=$(patsubst ./%.c, ./%.o, $(src))
CC=gcc
CPPFLAGS=-I
$(target):$(obj)
	$(CC) $(obj) -o $(target)
    
%.o:%.c
	$(CC) -c $< -o $@
	
.PHONY:clean
clean:
	rm -f $(obj) $(target)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值