Makefile 文件名处理函数(下)

addsuffix函数:给文件名加后缀

addsuffix函数的作用是:给文件列表中的每个文件名添加后缀SUFFIX

 $(addsuffix SUFFIX, NAMES…)

使用示例:

.PHONY: all
LIST = apple banana peach
all:
    @echo "LIST = $(LIST)"
    @echo "addsuffix = $(addsuffix .c, $(LIST))"

运行结果:

# make
LIST = apple banana peach
addsuffix = apple.c banana.c peach.c

addprefix函数:给文件名加前缀

addprefix函数的作用是:给文件列表中的每个文件名添加一个前缀PREFIX

$(addprefix PREFIX, NAMES…)

使用示例:

.PHONY: all
LIST = apple.c banana.c peach.c
all:
    @echo "LIST = $(LIST)"
    @echo "addsuffix = $(addprefix /home/wit/, $(LIST))"

执行make命令,运行结果:

 make
LIST = apple.c banana.c peach.c
addsuffix = /home/wit/apple.c /home/wit/banana.c /home/wit/peach.c

join函数:单词连接

join函数的作用是:将字符串LIST1和字符串LIST2的各个单词依次连接,合并为新的单词构成的字符串

$(join LIST1,LIST2)

使用示例:

.PHONY: all
LIST1 = apple banana peach
LIST2 = .c .h .s
LIST  = $(join $(LIST1), $(LIST2))
all:
    @echo "LIST1 = $(LIST1)"
    @echo "LIST2 = $(LIST2)"
    @echo "LIST = $(LIST)"

运行结果:

# make
LIST1 = apple banana peach
LIST2 = .c .h .s
LIST = apple.c banana.h peach.s

如果两个字符串中的单词个数不相等,则只合并前面的单词,剩下的单词不合并。如下面的Makefile

.PHONY: all
LIST1 = apple banana peach
LIST2 = .c .h 
LIST  = $(join $(LIST1), $(LIST2))
all:
    @echo "LIST1 = $(LIST1)"
    @echo "LIST2 = $(LIST2)"
    @echo "LIST = $(LIST)"

运行结果:

# make
LIST1 = apple banana peach
LIST2 = .c .h 
LIST = apple.c banana.h peach

因为LIST2中只有2个单词,所以我们可以看到最后一个单词peach没有参与合并,但仍作为一个新的单词合并到LIST变量中。

wildcard函数:列出所有符号匹配模式的文件

wildcard函数的作用是:列出当前目录下所有符合PATTREN模式的文件名

$(wildcard PATTERN)

其中PATTREN可以使用shell能识别的通配符:?、*等。

使用示例:列出当前目录下的所有C文件

.PHONY: all
LIST  = $(wildcard *.c)
all:
    @echo "LIST = $(LIST)"

执行make命令,运行结果为:

# ls
add.c  add.h  hello.c  main.c  makefile  sub.c  sub.h
# make
LIST = hello.c main.c add.c sub.c
《Makefile工程实践》视频教程,一线开发工程师独家录制,网上首家讲解Makefile的实战课程。从零开始,教你一步一步编写一个工程项目的Makefile,支持使用第三方静态库、动态库,支持指定模块或目录编译生成静态库、动态库,赠送企业级的Makefile模板,学完即可拿来使用,投入项目开发实战,具备独立开展项目开发和管理的能力。详情请点击淘宝链接:Linux三剑客