Makefile编写

3 篇文章 0 订阅
3 篇文章 0 订阅

makefile 规则

目标:依赖
(tab)命令

makefile执行原理

例子1:

app:add.o main.o sub.o
        gcc add.o main.o sub.o -o app

add.o:add.c
        gcc add.c -c
main.o:main.c
        gcc main.c -c
sub.o:sub.c
        gcc sub.c -c

makefile 文件中的第一条规则是makefile构建可执行文件的终极目标。
当规则中的依赖不存在时,向下查询,看是否有生成该依赖的规则并执行。
当执行规则时,会比较目标和依赖的时间:
当依赖的修改时间比目标的时间晚时,重新生成目标。即依赖文件被修改的情况下,重新生成目标。

makefile自定义变量

语法:
obj= main.o add.o sub.o
target = app
说明:makefile内置变量都是大写的,自定义变量使用小写。
获取变量中的值:$(obj)

makefile自动变量(只能在命令中使用)

$@ : 表示规则中的目标
$<: 表示规则中的第一个依赖
$^: 表示规则中的所有的依赖

makefile 匹配模式

例如:
%.o:%.c : 对目标和依赖进行匹配。

将例1修改成 使用自定义变量、自动变量、和匹配模式的形式:

obj = main.o add.o sub.o
target = app
$(target):$(obj)
	gcc $(obj)  -o $(target)

%.o:%.c
	gcc $< -c -o $@

说明:
匹配模式会根据通配符进行替换并执行。
例如碰到 add.o不存在。add.o 能匹配上。会生成相当于
add.o:add.c
gcc add.c -c -o add.o
的规则

makefile 常用函数

1、获取某个路径下的文件名称:
src = $(wildcard 目录/文件名)
例如: src = $(wildcard ./*.c) 获取当前目录中的所有的".c"文件
2、字符串替换
obj = $ (patsubst %.c,%.o,$(src))
将src变量中的所有的".c"文件替换成".o" 文件。

再次改造例1:

src = $(wildcard ./*.c)
obj = $(patsubst %.c,%.o,$(src))
target = app

$(target):$(obj)
	gcc $^ -o $@
%.o:%.c
	gcc $< -c -o $@

makefile 清理项目

创建一个清理规则
clean:
rm *.o app
使用:
make clean
缺点:
如果当前目录中有一个名为clean的文件,则会影响clean规则的执行。因为make命令会检查clean文件的时间,认为clean是最新的。导致clean规则不能执行。

解决方法
将clean规则声明为伪规则
伪规则: 不会与目录中的同名文件进行时间上的比较,防止重名的文件和规则目标重名时的构建问题。

.PHONY:规则目标(前边有".")
例如:.PHONY:clean

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值