未更新完会持续更新(这是我的学习笔记)
Makefile简介
Makefile的本质:无论多么复杂的语法,都是为了更好地解决项目文件之间的依赖关系。
1.Makefile的变量、模式匹配
变量
系统变量
自定义变量
=,延迟赋值
:=, 立即赋值
?=,空赋值
+=,追加赋值
自动化变量
$<:第一个依赖文件
$^:全部的依赖文件
$@:目标
模式匹配
%:匹配任意多个非空字符
shell:*通配符
默认规则
.o文件默认使用.c文件来进行编译
CC=gcc
TARGET=mp3
OBJS=main.o mp3.o
$(TARGET):$(OBJS)
$(CC) $^ -o $@
#main.o:
# $(CC) -c main.c -o main.o
#mp3.o:
# $(CC) -c mp3.c -o mp3.o
%.o:%.c
$(CC) -c $< -o $@
.PHONY:clean
clean:
rm mp3 mp3.o main.o
2.Makefile条件分支
条件分支
ifeq (var1,var2)
...
else
...
endif
ifneq (var1,var2)
...
else
...
endif
makefile:
ARCH ?= X86
ifeq ($(ARCH),x86)
CC=gcc
else
CC=arm-linux-gnueabihf-gcc
endif
3.Makefile的常用函数
(1)patsubst:模式替换函数 $(patsubst %.c , %.o, x.c.c bar.c)
(2)notdir:取文件名函数 $(notdir src/foo.c hacks)
(3)wildcard:获取匹配模式文件名函数(列出当前目录下所有符合模式“PATTERN”格式的文件名) $(wildcard *.c)
(4)foreach:遍历文件夹
整体makefile实现函数