makefile学习

本文详细介绍了makefile的使用,包括makefile的编写规则、变量类型如普通变量、自带变量和自动变量,模式规则的运用,以及makefile中的函数功能,如wildcard和patsubst。同时,还讲解了如何进行清理操作,以保持项目整洁。通过多个版本的示例,读者可以全面了解makefile在Linux和C语言开发中的重要性。

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

makefile介绍

​ makefile是用来管理项目工程的文件,一旦写好,只需一个make命令,整个工程完全自动编译,极大的提高了软件开发的速度。

​ make是一个命令工具,是一个解释makefile中指令的命令工具,windows下的nmake,Linux下gnu的make。makefile会使用gcc编译器对源代码进行编译,最终生成可执行文件或者是库文件。

makefile的编写规则

目标:依赖

(tab)命令

第一个版本:
main:main.c fun1.c fun2.c sum.c

 	gcc -o main main.c fun1.c fun2.c sum.c
第二个版本
main: main.o fun1.o fun2.o sum.o

​	gcc -o main main.o fun1.o fun2.o sum.o

main.o: main.c

​	gcc -c main.c -I./
 
fun1.o: fun1.c

​	gcc -c fun1.c 

fun2.o: fun2.c

​	gcc -c fun2.c 

sum.o: sum.c

​	gcc -c sum.c 
makefile中的变量

​ 在makefile中使用变量有点类似于c寓意着的宏定义,使用该变量相当于内容替换,使用变量可以使makefile易于维护,修改起来变得简单

makefile有三种类型变量

普通变量

foo=abc //变量定义使用=

bar=(foo)//(foo)//(foo)//使用变量

自带变量

CC CPPFLAGS CFLAGS LDFLAGS

自动变量

$@:表示规则中的目标

$<: 表示规则中的第一个条件

$^:表示规则中的所有条件,组成一个列表,以空格隔开,如果这个列表中有重复的项则消除重复项

makefile中的模式规则

比如:main.o:main.c fun1.o:fun1.c 说的简单点就是xxx.o:xxx.c

第三个版本
target=main

object=main.o fun1.o fun2.o sum.o

cc=gcc

CPPFLAGS=-I./

$(target):$(object)

​	$(cc) -o $@ $^

%.o:%.c

​	$(cc) -c $< $(CPPFLAGS)
makefile函数

makefile函数很多,下面是两个最常见的

1。wildcard - 查找指定目录下的指定文件

​ src=$(wildcard*.c) //查找当前目录下所有后缀文件为.c的文件,赋值给src

2。patsubst - 匹配替换

​ obj=(patsubst(patsubst%.c,%.o,(patsubst(src))//把src变量里所有后缀为.c的文件替换成.o

sample

比如当前目录有 a.c b.c c.c d.c

src=$(wildcard*.c) //src= a.c b.c c.c d.c

obj=(patsubst(patsubst%.c,%.o,(patsubst(src)) //pbj=a.o b.o c.o d.o

第四个版本
target=main   
src=$(wildcard*.c)   
object=$(patsubst%.c,%.o,$(src)) 
cc=gcc
CPPFLAGS=-I./
$(target):$(object)
​	$(cc) -o $@ $^
%.o:%.c
​	$(cc) -c $< $(CPPFLAGS)
makefile的清理操作

用途:删除编译生成的中间.o文件和最终目标文件

第五个版本
target=main   
src=$(wildcard*.c)   
object=$(patsubst%.c,%.o,$(src)) 
cc=gcc
CPPFLAGS=-I./
$(target):$(object)
​	$(cc) -o $@ $^
%.o:%.c
​	$(cc) -c $< $(CPPFLAGS)

.PHONY:clean
clean:
	rm -f $(object) $(target)

运行make命令会自动编译makefile文件的内容,但是不会执行makefile中clean方面的内容,要执行clean方面的内容要在shell上输入make clean

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值