Makefile的条件判断
ifeq 判断是否相等
ifneq 判断是否不相等
ifdef 判断是否定义过
ifndef 判断是否未定义过
#自动变量
SRC = main.o fun.o
CFLAGS = -c -Wall -I /home/star/Codes/day11/code/Makefile4/include
LDFLAGS = -lm
X = a
#ifeq ($(X),a)
ifneq ($(X),a)
Y = b
else
Y = c
endif
#ARCH=arm
ifndef ARCH
Z = abc
else
Z = qwe
endif
all:test
echo $(Y)
echo $(Z)
test:$(SRC) main.o
$(CC) $(LDFLAGS) $^ -o $@
%.o:%.c
$(CC) $(CFLAGS) $< -o $@
.PHONY:clean
clean:
$(RM) *.o test
star@star-HP13-Ubuntu:~/Codes/day11/code/Makefile4$ make
cc -c -Wall -I /home/star/Codes/day11/code/Makefile4/include main.c -o main.o
cc -lm main.o fun.o -o test
echo c
c
echo abc
abc
Makefile的函数
基本语法:$(<function> <arguments>)或是${<function> <arguments>}
常见函数
$(wildcard PATTERN)
功能:列出所有符合模式“PATTERN”格式的文件名。
返回:空格分割的所有符合模“PATTERN”的文件名。
说明:“PATTERN”使用shell可识别的通配符,包括“?”(单字符)、“*”(多字符)等。
示例:$(wildcard *.c)返回值为当前目录下所有.c源文件列表。
$(patsubst <pattern>,<replacement>,<text>)
名称:模式字符串替换函数。
功能:查找 <text> 中的单词(单词以“空格”、“Tab”或“回车”“换行”分隔)是否符合模式 <pattern> ,如果匹配的话,则以 <replacement> 替换。这里, <pattern> 可以包括通配符 % ,表示任意长度的字串。如果 <replacement> 中也包含 % ,那么, <replacement> 中的这个 % 将是 <pattern> 中的那个 % 所代表的字串。(可以用 \ 来转义,以 \% 来表示真实含义的 % 字符)
返回:函数返回被替换过后的字符串。
示例:$(patsubst %.c,%.o,x.c bar.c)把字串 x.c bar.c 符合模式 %.c 的单词替换成 %.o ,返回结果是 x.o bar.o
自定义函数
$(call <expression>,<parm1>,<parm2>,<parm3>...)