作者:JRamboKing | 来源:互联网 | 2023-10-09 19:19
注:本笔记并不专业,可参考这一博主,由浅入深讲解的很好 a. Makefile文件没有后缀名,命名有几种可选,如makefile
和Makefile
,推荐用是Makefile
。
2. Makefile文件变量赋值 a. 变量的使用可以提高makefile的可维护性。⼀个变量的定义很简单,就是⼀个名字(变量名)后⾯跟上⼀个等号,然后在等号的后⾯放这个变量所期望的值。对于变量的引⽤,则需要采⽤$(变量名)
或者${变量名}
这种模式。类似C语言中的#define pi 3.14
,利用变量来一般化文件名,需要修改时,只需要修改这些变量的定义即可。
CC=gcc RM=rm OBJS=main.o a.o EXE=main $(EXE):$(OBJS)$(CC) -o $@ $^ %.o:%.c:$(CC) -c -o $@ $^ clean:$(RM) $(EXE) $(OBJS)
b. 对于变量的赋值有四种,分别为 (1)即时赋值 a:=1 :赋值后,该变量值即刻等于右值 (2)延时赋值 a=1 :赋值后,该变量的值可以随着后续c值的变化而变化 (3)条件赋值 a?=1 :如果a已经被定义,则该赋值操作不执行;否则a值等于右值 (4)追加赋值 a+=1 :在a值后,以空格隔开追加一个值
c.自动变量 &#xff08;1&#xff09;$&#64; :表示目标。存在多个目标时&#xff0c;表示任何造成命令执行的目标 &#xff08;2&#xff09;$^ &#xff1a;表示所有依赖 &#xff08;3&#xff09;$< &#xff1a;仅表示第一个依赖
3. 利用上述变量可以简化makefile编写&#xff0c;无需每个.o文件都写一遍 4. 假目标&#xff1a;个人理解为防止出现和目标名字相同的文件&#xff0c;所以对真目标的一种保护&#xff0c;这样其他文件均为假目标 CC&#61;gcc RM&#61;rm OBJS&#61;main.o a.o EXE&#61;main $(EXE):$(OBJS)$(CC) -o $&#64; $^ %.o:%.c:$(CC) -c -o $&#64; $^ clean:$(RM) $(EXE) $(OBJS) .PHONY clean
5. 函数 a. wildcard函数:通配符函数&#xff0c;形式为$(wildcard patten) b. patsubst函数 用来进行字符换替换&#xff0c;形式为$(patsubst patten, replacement, text) c. 应用&#xff1a;对于新增或删减一个.c文件&#xff0c;无需重新修改Makefile&#xff0c;示例如下
CC&#61;gcc RM&#61;rm SRCS&#61;$(wildcard *.c) OBJS&#61;$(patsubst %.c, %.o, $(SRCS)) EXE&#61;main $(EXE):$(OBJS)$(CC) -o $&#64; $^ %.o:%.c:$(CC) -c -o $&#64; $^ clean:$(RM) $(EXE) $(OBJS)