Linux系统编程-Makefile文件使用

本文介绍了Makefile在项目管理中的作用,详细讲解了变量定义、引用符$、wildcard函数、patsubst函数、匹配规则、.PHONY伪目标的用法,并提供了Makefile模板,包括文件编译、清理和重建的规则。

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


  

一、Makefile的引入

  当一个项目工程中有很多个.c文件时。如果经常使用gcc来一个一个进行编译再链接会很繁琐,为了方便使用,引入Makefile文件。这样可以使所有的.c文件一起进行编译链接,并生成可执行文件。

二、Makefile相关知识点

1. 定义变量

使用:变量名:= 变量存储的信息

2. 变量引用符 $

  $有特殊的含义(表示变量或者函数的引用),如果我们的规则如果需要使用没有特殊含义的该字符$,需要书写两个连续的$$。如下:

Name_A:=10
Name_B:=$(Name_A)   #这里Name_B的值也为10。
SRC_DIR:=./src/

3. wildcard函数

以使用$(wildcard $(SRC_DIR)*.c)来获取工作目录SRC_DIR下的所有的.c 文件列表。

4. patsubst函数

  格式替换功能。$(patsubst %.c, %.o , $(wildcard $(SRC_DIR)*.c)),首先使用wildcard函数获取工作目录SRC_DIR下的.c文件列表,之后将列表中所有文件名的后缀.c替换为.o目标文件。这样我们就可以得到.o文件列表(只是名字列表,而不是实质的.o文件)。

5. 匹配规则

目标文件在前,依赖文件在后。注意:这里的命令行前并不是空格,而是一个Tab。

目标文件:依赖文件
	gcc  依赖文件  -o  目标文件  #执行的命令

举例:链接.o文件生成可执行文件main。

main: main.o sort.o
	gcc main.o sort.o -o main -I./inc/  #这里-I./inc/表面头文件路径

在执行的命令中,我们可以使用下面符号来进行代替文件。
$@:表示目标文件
$^:表示依赖文件

main: main.o sort.o
	gcc $^ -o $@ -I./inc/

6. all声明

执行make时,会无条件执行all声明下面的所有命令,为了不显示命令的输出,可以在命令前加上@。

all:
	@make ARCH=arm64 CROSS_COMPILE=aarch64-linux- -C $(KDIR) M=$(PWD) modules 
	@rm -fr .tmp_versions *.o *.mod.o *.mod.c *.bak *.symvers *.markers *.unsigned
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值