在makefile中常常要处理文件名(目录 + 文件), 掌握一些简单的函数可以极大简化这个过程.
模式1: filename -> "dir""notdir"
1) 取出目录名(with slash):$(dir <names...>)
FILENAME1 := /tmp/111/222/333/444.c
FILENAME2 := ./aaa/bbb/ccc/ddd.txt
FILENAMES := $(FILENAME1) $(FILENAME2)
DIRS := $(dir $(FILENAMES))
@echo DIRS is \"$(DIRS)\"
2) 取文件名:$(notdir <names...>)
FILENAME1 := /tmp/111/222/333/444.c
FILENAME2 := ./aaa/bbb/ccc/ddd.txt
FILENAMES := $(FILENAME1) $(FILENAME2)
NAMES := $(notdir $(FILENAMES))
@echo NAMES is \"$(NAMES)\"
模式2:filename -> "basename""suffix"
1) 取基名:$(basename <names...>)
FILENAME1 := /tmp/111/222/333/444.c
FILENAME2 := ./aaa/bbb/ccc/ddd.txt
FILENAMES := $(FILENAME1) $(FILENAME2)
BASENAMES := $(basename $(FILENAMES))
@echo BASENAMES is \"$(BASENAMES)\"
2) 取后缀:$(suffix <names...>)
FILENAME1 := /tmp/111/222/333/444.c
FILENAME2 := ./aaa/bbb/ccc/ddd.txt
FILENAMES := $(FILENAME1) $(FILENAME2)
SUFFIXS := $(suffix $(FILENAMES))
@echo SUFFIXS is \"$(SUFFIXS)\"
3) 添加前缀:$(addprefix <prefix>,<names...>)
NAME1 := a
NAME2 := b
NAME3 := c
NAMES := $(NAME1) $(NAME2) $(NAME3)
PREFIX_NAMES:=$(addprefix src/, $(NAMES))
@echo PREFIX_NAMES is \"$(PREFIX_NAMES)\"
4) 添加后缀:$(addsuffix <prefix>,<names...>)
NAME1 := a
NAME2 := b
NAME3 := c
NAMES := $(NAME1) $(NAME2) $(NAME3)
NAME_SUFFIXS:=$(addsuffix .c, $(NAMES))
@echo NAME_SUFFIXS is \"$(NAME_SUFFIXS)\"