简单使用makefile生成调试程序的步骤

本文详细介绍了如何使用Makefile来生成调试程序,包括预定义变量声明、目标与依赖文件定义、目标及其规则设定,以及文件重建和清理。重点讨论了如何避免main函数重复定义问题,以及使用$@、$<、$^等自动变量的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一步,预定义变量的声明

CC:=gcc

RM:=rm -f

第二步,定义目标和需要的依赖文件

此处可以利用函数来检索当前目录下,所以符合模式规则的文件

src := $( wildcard *.c)

//文件名的检索替换有三种方式,

//1,利用已有变量,通过模式串直接替换

obj:= $(src:%.c=%.o)

//2.通过字符串模式替换函数进行替换

out:=$(patstrst %.c,%.out,$(src))

第三步,设定目标及其依赖,以及目标实现的规则

//多个目标生成一个可执行文件的做法

//生成目标文件

$(out):$(obj)

$(CC) -o $@  $^

//生成obj文件

$(obj):$(src)

$(CC) -c $^ -o $@

//根据源文件生成多个可执行文件的做法

//定义一个统一的目标

makefile仅仅生成一个起始定义的目标,因此,如果需要生成多个可执行文件时,需要加一个伪目标,让输出的文件成为二级依赖

all:$(out)

//此处$< 自动变量比较关键,其意义是将依赖文件拆开一个一个进行匹配

//如果使用了$^的话,是使用全部的依赖文件进行匹配。效果是生成一个可执行文件,从而出现main函数重复定义的问题

此处必须使用%来进行目标文件和依赖文件的声明、定义。因为%有递归匹配的含义。如果使用普通变量的话,$@会匹配所有目标文件, 但$<只会匹配依赖文件中的第一个。关键问题是目标文件和依赖文件的处理。

%.out:%.o

$(CC) -o $@ $<

%.o:%.c

$(CC) -c $^ $@

//使用$(out) 匹配字符串,按所有字符串在一起进行处理。使用%.out 将字符串,按模式递归匹配处理

//第四步,根据需要设定重建以及清理文件

.PHONY:rebuild clean

rebuild:$(out) clean

clean:

$(RM) $(out) $(obj)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值