Makefile教程(掌握这里足够)

众所周知,在Linux环境下进行项目开发那就少了使用make来构建和管理自己的工程。如果想要更加深入的学习,我在这里推荐一本书
https://www.jianguoyun.com/p/DZWKrLIQjKL5Bxi0z5UD 访问密码:KvhT2v

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)
函数功能:搜索字串“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
  • 6
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值