文章目录

  • 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教程(绝对经典,所有问题看这一篇足够了)

GNU Make

Make教程(C语言中文网)

Makefile中的其他函数