makefile简介

6 篇文章 1 订阅
5 篇文章 1 订阅

1. 规则

格式:

target: depends
<tab>command

2. 伪目标

关键字.PHONY表示它后面的目标都是伪目标
格式:

.PHONY: target1 targe2

3. 变量

自定义变量
格式:变量名 := 值
引用:$(变量名)

自动变量
在使用时,自动替换特定的值
自动变量有
$@ 当前规则的目标文件
$^ 当前规则的所有依赖文件
$< 当前规则的第一个依赖文件
$? 规则中日期比目标文件新的所有依赖文件(逗号隔开)
$(@D) 目标文件的目录名
$(@F) 目标文件的文件名

预定义变量
内部事先定义好的,有固定的值。
AR 归档维护程序的名称,默认值为 ar
AS 汇编程序的名称,默认值为 as
CC C编译器的名称,默认值为 cc
CPP C预编译器的名称,非C++,默认值为 $(CC) -E
CXX C++编译器的名称,默认值为 g++
ARFLAGS 归档维护程序的选项。
ASFLAGS 汇编程序的选项。
CFLAGS C编译器的选项。
CPPFLAGS C预编译器的选项,非C++。
CXXFLAGS C++编译器的选项。

环境变量
可以使用export命令查询系统所有环境变量。

4. 规则

隐含规则
name.o文件自动依赖name.cname.cc文件,无需编写name.o:name.c规则。

模式规则
如:%.o: %.cpp匹配任何与目标文件同名且后缀为cpp的依赖文件。

5. 函数

wilecard 搜索当前目录下的文件名
patsubst 字符串替换函数
addprefix 加前缀函数
notdir 去掉文件列表中所有文件的路径,只保留文件名

示例:

$(wildcard *.c)   # 来获取当前目录下的所有的.c文件列表
$(wildcard dir/*.c)  # 获取./dir目录下的所有.c文件列表
$(filter-out PATTERN...,TEXT) # 过滤掉字串“TEXT”中所有符合模式“PATTERN”的单词,保留所有不符合此模式的单词(注意路径)
$(patsubst %.c,%.o,$(dir))    # 把$(dir)中的变量符合后缀是.c的全部替换成.o
$(notdir $(src))  # 去除$(src)中所有文件的路径,只保留文件名
$(addprefix $(OBJDIR)/,$(OBJS))     # 加前缀函数,在$(OBJS)的每一个文件前加上前缀$(OBJDIR)/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值