文章目录
- Makefile | Makefile几个常用函数
- 1.Makefile函数
- 1.1 addprefix函数
- 1.2 filter函数
- 1.3 filter-out函数
- 1.4 wildcard函数
- 1.5 patsubst函数
- 2.参考
Makefile | Makefile几个常用函数
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.参考
Makefile教程(绝对经典,所有问题看这一篇足够了)