Makefile

本文详细介绍了Makefile的命名规则、工作原理、变量使用、函数功能及伪目标的概念。通过Makefile,可以自动化编译工程文件,提高效率。文章强调了Makefile中目标与依赖的关系,以及如何通过变量和函数实现更灵活的控制。同时,伪目标如clean用于执行清理操作,不依赖文件比较。
摘要由CSDN通过智能技术生成


前言

Makefile指定了工程中文件的编译顺序,好处就是自动化编译,make是一个命令工具,用来解释Makefile文件中的指令。


一、Makeflie文件命名规则

文件命名: makefile 或者 Makefile
命名规则:

目标xxx:依赖xxx
	命令(shell命令)
	...
  • 目标:最终要生成的可执行文件
  • 依赖:生成目标所需要的文件或目标
  • 命令:执行命令对依赖进行操作,进而生成目标(命令前需要加tab的缩进符)

makefile文件中可以一条或多头规则,其他的规则一般都是为第一条规则服务的,如果有个规则和第一条规则无关,是不会执行的。

二、Makeflie的工作原理

  • 命令执行前,先检查规则中的依赖是否存在,存在就直接执行,不存在的话就向下检查其他规则,查找是否有其他规则用于生成该依赖,并执行该规则中的命令。
  • 检测更新,在执行规则中的命令时,会比较目标和依赖文件的时间,如果依赖文件的时间比目标晚,则需要重新生成目标;如果依赖文件的时间比目标早,目标不需要更新,其规则下的命令也不会执行,但是可以使用make 目标名的方式强制执行。

三、Makeflie的变量(在命令中使用)

  • 自定义变量
    变量名=变量值
  • 预定义变量
AR:归档维护程序的名称,默认值为 ar (静态库制作工具)
CC:C 编译器的名称,默认值为 cc
CXX:C++ 编译器的名称,默认为 g++
$@:目标的完整名称
$<:第一个依赖文件的名称
$^: 所有的依赖文件
  • 获取变量的值
    $(变量名)

通配符
% 匹配一个字符串,用于目标和依赖(%.o:%.c

四、Makeflie的函数

$(wildcard PATTERN…)

  • 功能:获取指定目录下,指定文件列表;
  • 参数:PATTERN 一个或者多个目录下的某种类型的文件,如果有多个目录需要用空格隔开
  • 返回:得到若干文件列表,文件名用空格隔开
$(wildcard ./*.c ../sub/*.c)

$(patsubst pattern, replacement, text)

  • 功能:查找text中的单词是否符合模式pattern,如果匹配就用 replacement 代替
  • 参数:pattern 和 replacement 可以包含通配符 %,也可以使用 \ 转义符表示真实的 %
  • 返回:替换后的字符串
$(patsubst %.c, %.o, x.c bar.c)

五、伪目标

使用伪目标不会和已存在的文件比较,例如定义目标名 clean,如果目录中也存在clean这个文件,那么使用make clean就不会执行,因为clean没有依赖,clean这个文件永远是最新的。

.PHONY clean
clean:
	rm $(objs) -f
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值