Makefile教程(掌握这⾥⾜够)
1. makefile的命名
默认的情况下,make 会在⼯作⽬录(执⾏ make 的⽬录)下按照⽂件名顺序寻makefile ⽂件读取并执⾏,查的⽂件名顺序为:“GNUmakefile”、“makefile”、“Makefile”。
2. makefile的规则:
规则中的三要素: ⽬标, 依赖, 命令
3. makefile的两个函数
3.1 获取匹配模式⽂件名函数—wildcard
$(wildcard *.c)
函数功能:列出⽬录下所有符合⽂件格式的⽂件
src=$(wildcard ./*.c) #返回值为当前⽬录下所有.c 源⽂件列表。
3.2 模式替换函数—patsubst
$(patsubst PATTERN,REPLACEMENT,TEXT)
函数功能:列出⽬录下所有符合⽂件格式的⽂件
obj=$(patsubst ./%.c, ./%.o, $(src)) #返回值将当前⽬录下的.c源⽂件替换为.o⽂件
3.3 查字符串函数—findstring
$(findstring FIND,IN)
makefile phony
函数功能:搜索字串“IN”,查“FIND”字串。
⽰例:
$(findstring a,a b c)
$(findstring a,b c)
第⼀个函数结果是字“a”;第⼆个值为空字符。
4. makefile的三个⾃动变量
$<:规则中的第⼀个依赖
$@:规则中的⽬标
$^:规则中的所以依赖
5.makefile模版
5.1初步版Makefile
src=$(wildcard ./*.c)
obj=$(patsubst ./%.c, ./%.o, $(src))
target=app
cc = gcc
CPPFLAGS = -I
$(target):$(obj)
$(cc) $(obj) -o $(target)
%.o:%.c
$(cc) -c $< -o $@
.PHONY:clean
clean:
rm $(obj) $(target) -f
hello:
echo "Hello,makefile"
5.2进阶版Makefile
.PHONLY :all cl cla
src = $(wildcard ./*.c)
targetc = $(patsubst %.c, % ,$(src))
objc = $(patsubst %.c, %.o, $(src))
#srcpp = $(wildcard ./*.cpp)
#targetcpp = $(patsubst %.cpp, %, $(srcpp)) #objcpp = $(patsubst %.o, %.cpp, $(srcpp))
CC = gcc
#PP = g++
CFLAGS = -g -Wall
CPPFLAGS = -I ./
ifeq ($(findstring .c, $(src)), .c)
all:$(targetc)
$(targetc):%:%.o
$(CC) $< -o $@
$(objc):%.o:%.c
$(CC) -c $<
endif
cl:
rm -rf $(objc)
cla:
rm -rf $(objc)
rm -rf $(targetc)
rm -rf a.out
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论