Makefile | Makefile几个常用函数

目录

1.Makefile函数

1.1 addprefix函数

1.2 filter函数

1.3. filter-out函数

1.4 wildcard函数

1.5 patsubst函数

2.参考


1.Makefile函数

1.1 addprefix函数

addprefix函数是用来给字符串中的每一个子串前加上一个前缀,其形式是:

$(addprefix prefix, names...)

实例:

.PHONY:all

SOURCE = main.c foo.c bar.c
OBJ = $(PWD)
add_source = $(addprefix $(OBJ)/, $(SOURCE))

all:
	@echo $(add_source)

运行结果:

fly@fly-vm:~/workSpace/makefile$ make -f addprefix.mk 
/home/fly/workSpace/makefile/main.c /home/fly/workSpace/makefile/foo.c /home/fly/workSpace/makefile/bar.c

1.2 filter函数

filter函数用于从一个字符串中,根据模式得到满足模式的字符串,其形式是:

$(filter pattern..., text)

实例:

.PHONY: test

FILES   = $(shell ls)
OBJS    = ${filter %.c %.h, $(FILES)}

test:
        @echo $(FILES)
        @echo $(OBJS)

执行结果:

[fly@fly-vm example_100]$ ls
001_cos.c  002_cosLine.c  011_fishing.c  debug.h  filter.mk  LICENSE  Makefile  README.en.md  README.md
[fly@fly-vm example_100]$ make -f filter.mk
001_cos.c 002_cosLine.c 011_fishing.c debug.h filter.mk LICENSE Makefile README.en.md README.md
001_cos.c 002_cosLine.c 011_fishing.c debug.h

1.3. filter-out函数

filter-out函数用于从一个字符串中根据模式滤除一部分字符串,其形式是:

$(filter-out pattern..., text)

实例:

.PHONY: test

FILES   = $(shell ls)
OBJS    = ${filter-out %.c %.h, $(FILES)}

test:
        @echo $(FILES)
        @echo $(OBJS)

执行结果:

[fly@fly-vm example_100]$ ls
001_cos.c  002_cosLine.c  011_fishing.c  debug.h  filter.mk  filter-out.mk  LICENSE  Makefile  README.en.md  README.md
[fly@fly-vm example_100]$ make -f filter-out.mk
001_cos.c 002_cosLine.c 011_fishing.c debug.h filter.mk filter-out.mk LICENSE Makefile README.en.md README.md
filter.mk filter-out.mk LICENSE Makefile README.en.md README.md

1.4 wildcard函数

wildcard是通配符函数,通过它可以得到我们所需的文件,这个函数相当于我们在Windows或是Linux命令行中的“*”。

其形式是:

$(wildcard pattern)

1.5 patsubst函数

 patsubtst函数是用来进行字符串替换的,其形式是:

$(patsubst pattern, replacement, text)

wildcard和patsubst的实例:

SRC = ${wildcard *.c}
BIN = ${patsubst %.c, %, $(SRC)}
CFLAGS = -g -Wall
LIBS = -lm

all:$(BIN)

$(BIN):%:%.c
        $(CC) -o $@ $< $(CFLAGS) $(LIBS)

clean:
        $(RM) a.out $(BIN)

.PHONY:all clean

运行结果:

[fly@fly-vm example_100]$ ls
001_cos.c  002_cosLine.c  011_fishing.c  debug.h  LICENSE  Makefile  README.en.md  README.md
[fly@fly-vm example_100]$ make
cc -o 002_cosLine 002_cosLine.c -g -Wall -lm
cc -o 001_cos 001_cos.c -g -Wall -lm
cc -o 011_fishing 011_fishing.c -g -Wall -lm

2.参考

1.Makefile教程(绝对经典,所有问题看这一篇足够了)

2.GNU MAKE

3.C语言中文网之Makefile学习

4.Makefile中的其它常用函数

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值