Makefile条件判断和函数
  Linux

Makefile条件判断和函数

 次点击
7 分钟阅读

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>...)

© 本文著作权归作者所有,未经许可不得转载使用。