Makefile学习小结

目标(target):依赖(prerequiries)
<tab>命令(command)
1.赋值
变量定义:
		var = variable
		var ?= variable
		var := variable
		var += variable or var
		
		define var
		variable
		endef
		
	延时变量:使用时扩展,并确定值(=、?=、define定义)
	立即变量:定义时确定值(:=定义)
	+=:如果使用:=定义的变量则为立即变量,否则为延时变量
2.常用函数
(1)字符串替换及分析
		$(subst from,to,text)
			将文本text中的from替换为to
			e.g.
				$(subst ee,EE,feet)
				--->fEEt
		
		$(patsubst pattern,replacement,text)
			将text中符合pattern的字符()替换为replacement,pattern与replacement可以为通配符
			e.g.
				$(patsubst %.c,%.o,x.c.c bar.c)
				--->x.c.o bar.o
		
		$(strip string)
			去掉前导与结尾空格,并将中间的多个空格压缩为单个空格
			e.g.
				$(strip a   b c)
				--->a b c
		
		$(findstring find,in)
			在字符串in中查找find,若存在返回find,否则返回空
			e.g.
				$(findstring a,a b c)
				--->a
				$(findstring a,b c)
				--->
				
		$(filter pattern,text)
			返回在text中由空格隔开且匹配pattern的字,去除不符合格式pattern的字
			e.g.
				$(filter %.c %.s,foo.c bar.c baz.s ugh.h)
				--->foo.c bar.c baz.s
				
		$(filter-out pattern,text)
			返回在text中由空格隔开且不匹配pattern的字,去除符合格式pattern的字
			e.g.
				$(filter-out %.c %.s,foo.c bar.c baz.s ugh.h)
				--->ugh.h
				
		$(sort list)
			将list中的字按字母顺序排列并去掉重复的字,输出由单个空格隔开的字的列表
			e.g.
				$(sort foo bar lose)
				--->bar foo lose
(2)文件名函数
		$(dir names)
			提取names中的路径部分
			e.g.
				$(dir src/foo.c hacks)
				--->src/ ./
		
		$(notdir names)
			提取names中的文件名部分
			e.g.
				$(notdir src/foo.c hacks)
				--->foo.c hacks
				
		$(suffix names)
			提取names中的文件后缀
			e.g.
				$(suffix src/foo.c src-1.0/bar.c hacks)
				--->.c .c
			
		$(basename names)
			提取names中的除后缀外的所有字符
			e.g.
				$(basename src/foo.c src-1.0/bar hacks)
				--->src/foo src-1.0/bar hacks
				
		$(addsuffix suffix,names)
			将后缀suffix添加到names
			e.g.
				$(addsuffix .c,foo bar)
				--->foo.c bar.c
			
		$(addprefix prefix,names)
			将前缀prefix添加到names
			e.g.
				$(addprefix src/,foo bar)
				--->src/foo src/bar
				
		$(wildcard pattern)
			匹配pattern格式的文件
			e.g.
				当前目录下存在1.c、2.c、1.h、2.h
				src := $(wildcard *.c)
				--->1.c 2.c
(3)其他函数
		$(foreach var,list,text)
			list扩展之后的值赋给var,text引用该变量进行扩展
			e.g.
				将变量files的值设置为dirs中所有目录下的所有文件列表
				dirs := a b c d
				files := $(foreach dir,$(dirs),$(wildcard $(dir)/*))
				--->i)dir值为a,扩展结果为$(wildcard a/*)
					ii)dir值为b,扩展结果为$(wildcard b/*)
					iii)dir值为c,扩展结果为$(wildcard c/*)
					iv)dir值为d,扩展结果为$(wildcard d/*)
					......
					
				<==>files := $(wildcard a/* b/* c/* d/*)
				
		$(if condition,then-part[,else-part])
			i)将condition的前导空格、结尾空格去掉,然后扩展;若扩展为非空字符,则condition为真;若扩展为空,则condition为假;
			ii)若condition为真,则计算then-part作为函数返回值;
			iii)若condition为假且else-part存在,则计算else-part作为函数返回值;若else-part不存在,则函数返回空值。
			
		$(origin variable)
			查询变量
			返回值:
				i)undefined                    未定义
				ii)default                     默认定义
				iii)environment                环境变量定义(-e选项未打开)
				iv)environment override        环境变量定义(-e选项已打开)
				v)file                         Makefile中定义
				vi)command line                命令行中定义
				vii)override                   Makefile中使用override指令定义
				viii)automatic                 自动变量

		$(shell command arguments)
			执行命令行
			e.g.
				当前目录下存在1.c、2.c、1.h、2.h
				src := $(shell ls *.c)
				--->1.c 2.c
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值