makefile 常用函数

call

可以创建定制化参数函数的引用函数
支持对自定义函数的引用
支持将一个变量定义为一个复杂的表达式,用call函数根据不同的参数对他进行展开来获取不同的结果

原型

$(call VARIABLE,PARAM,PARAM,…)

执行时,将PARAM依次赋值给$(1) $(2) $(3),最后对VARIABLE展开后的表达式进行处理

返回值:VARIABLE展开后的表达式的值

使用

pointer := pointed_value
source_dir=./
source_file:= $(wildcard *.c)

funcalll=$(source_dir)$1


a=$(call funcalll,a.c)

all:target wild

wild:$(wildcard $(source_dir)/*.c)
    @echo $a
    

filter filter-out

filter:过滤函数
filter-out:反过滤函数

原型

$(filter PATTERN,PATTERN…,TEXT)
$(filter-out PATTERN PATTERN…,TEXT)

使用

objects=main.o foo.o main2.o
pattern=main.o foo.o

all:target

target:
    @echo $(filter-out $(pattern),$(objects))
    @echo start -------------------------
    @echo end ----------------------------


addsuffix addprefix

添加尾缀

原型

$(addsuffix/addprefix suffix1 suffix2,name1 name2)

使用

# list all files in some directories: (#directories, #types)
listf = $(filter $(if $(2),$(addprefix %.,$(2)),%),\
          $(wildcard $(addsuffix $(SLASH)*,$(1))))

wildcard

通配符函数,一般通配符会被自动展开,但是在变量的定义和函数引用时通配符将失效
这种情况可以使用函数"wildcard"

原型

$(wildcard *.c)

使用

pointer := pointed_value
source_dir=./
source_file:= $(wildcard *.c)

all:target wild

wild:$(wildcard $(source_dir)/*.c)
    @echo $^

target:
    @echo start -------------------------
    @echo $(patsubst %.c,%.o,$(source_file))
    @echo end ----------------------------

patsubst

字符处理,将文件列表模式进行替换

原型

$(patsubst 原模式, 目标模式, 文件列表)

使用

pointer := pointed_value
source_file:= $(wildcard *.c)
all:target

target:
    @echo start -------------------------
    @echo $(patsubst %.c,%.o,$(source_file))
    @echo end ----------------------------

eval

将text内容展开做为makefile的一部分被makefile解析和执行

原型

$(eval text)

使用

$(eval test:test.c)

将会产生

cc test.c -o test

origin

测试变量来源

原型

$(origin var)

使用

按原型那么用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值