Makefile学习路线

最近项目有需求,需要重构一个项目的Makfefile文件, 原来的供应商提供的文件,太过复杂。故有以下学习过程,以下只做参考,如果有学习的需求, 我推荐B站Up主无限十三年跟着他的视频从头到尾敲一遍(当然不需要全敲),这只是一门编程语言,重要的是真正自己去写,和学其他语言一样,不会的去百度或者问AI,有需要的函数就去百度搜索有没有这个函数,慢慢就上手了。当前项目的Makefile我已经重构完成了,如果遇到什么问题可以留下评论。

  • Makefile 是一个文本文件,定义了如何编译和链接程序。
  • Make 是一个命令行工具,它会读取 Makefile 中的规则,并根据规则执行命令。
  • Makefile 的核心思想是通过目标(Target)、依赖(Dependencies)命令(Commands)来描述构建过程.
main.o: main.c
	gcc -c main.c -o main.o

target: depencendices
			command

遵循以上的基本格式,

# Defines the variables
CC = gcc   # 编译命令
CFLAGS = -Wall -02 -Iinclude  #编译标志位, 应该是可选的
SRC_DIR = src			# 编译的.c文件目录
OBJ_DIR = obj			#  编译后生成的.o文件

# Get all file of .c
SRCS = $(wildcard $(SRC_DIR)/*.c)   #使用内置函数来返回符合规则的.c文件,规则定义为,所有SRC_DIR中的.c文件返回出来。

# Make the .c file to .o  #这其实是一个路径, 包含所有.o文件的路径。
OBJS = $(patsubst $(SRC_DIR)/%.c, $(OBJ_DIR)/%.o, $(SRCS))  # 所有它只是替换了 SRCS中的文件名路径,文件名没变。所以也是返回一个LIST

# Final obj
myprogram: $(OBJS)
	$(CC) $(CFLAGS) -c $< -o $@  ##### 其实这里的$<($^指代all)指的是第一个依赖项,也就是OBJS, $@指的是myprogram这个Target。
	
clean
	rm -f $(OBJ_DIR)/*.o myprogram

1. $< 表示当前规则下的第一个依赖,在上面,它应该代替的是main.c
$@ 表示当前规则中的目标,@ , 就是@ 到目标。

  • *f --> force 强制删除 rm a.txt --> 会删除a.txt文件。
    这两个组合在一起就是 rm -f *.o myprogram ,会强制清除所有的.o文件和Myprogram文件, 相当于通配符,表示all;

/% , %表示模式匹配符,用于模式规则,它表示匹配任意字符串࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值