c++ (Linux)——makefile

目录

一、什么是makefile

二、编写第一个简单的makefile规则

三、makefile工作原理并优化程序

 四、引入makefile变量及简化程序

五、 引入makefile模式并简化程序


一、什么是makefile

        一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中, Makefile 文件定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编 译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 Makefile 文件就 像一个 Shell 脚本一样,也可以执行操作系统的命令。
         Makefile 带来的好处就是“自动化编译” ,一旦写好,只需要一个 make 命令,整 个工程完全自动编译,极大的提高了软件开发的效率。make 是一个命令工具,是一个 解释 Makefile 文件中指令的命令工具,一般来说,大多数的 IDE 都有这个命令, 比如 Delphi 的 make,Visual C++ 的 nmake,Linux 下 GNU 的 make

二、makefile规则编写

二、编写第一个简单的makefile规则

(1)安装make

sudo apt install make

(2) 编写规则

 (3)执行make命令

三、makefile工作原理并优化程序

 ◼ 命令在执行之前,需要先检查规则中的依赖是否存在
 如果存在,执行命令 
 如果不存在,向下检查其它的规则,检查有没有一个规则是用来生成这个依赖的, 如果找到了,则执行该规则中的命令 
◼ 检测更新,在执行规则中的命令时,会比较目标和依赖文件的时间 
 如果依赖的时间比目标的时间晚,需要重新生成目标(就是依赖更新的时间,先有的依赖后有目标) 
 如果依赖的时间比目标的时间早,目标不需要更新,对应规则中的命令不需要被 执行

 
其他规则都是为第一条规则服务,如果第一条规则中没有使用到的依赖,在后面规则目标中出现,将不会运行

 

 四、引入makefile变量及简化程序

自定义变量 变量名=变量值 var=hello 
预定义变量 AR : 归档维护程序的名称,默认值为 ar 
CC : C 编译器的名称,默认值为 cc 
CXX : C++ 编译器的名称,默认值为 g++ 
$@ : 目标的完整名称 
$< : 第一个依赖文件的名称 
$^ : 所有的依赖文件 
◼ 获取变量的值 $(变量名)
app :main.c a.c b.c 
gcc -c main.c a.c b.c 
#自动变量只能在规则的命令中使用 a
pp:main.c a.c b.c 
$(CC) -c $^ -o $@ $(var) 

五、 引入makefile模式并简化程序

%.o:%.c 
- %: 通配符,匹配一个字符串 
- 两个%匹配的是同一个字符串 
%.o:%.c gcc -c $< -o $ 

六、引入makefile函数并简化程序(最终优化以及简化的程序)

 ◼ $(wildcard PATTERN...) 
 功能:获取指定目录下指定类型的文件列表
 参数:PATTERN 指的是某个或多个目录下的对应的某种类型的文件,如果有多 个目录,一般使用空格间隔 
 返回:得到的若干个文件的文件列表,文件名之间使用空格间隔 
 示例: $(wildcard *.c ./sub/*.c) 返回值格式: a.c b.c c.c d.c e.c f.c 

 ◼ $(patsubst ,,) 
 功能:查找中的单词(单词以“空格”、“Tab”或“回车”“换行”分隔)是否符合 模式,如果匹配的话,则以替换。
 可以包括通配符`%`,表示任意长度的字串。如果 中也包含`%`,那么,中的这个`%`将是中的那个% 所代表的字串。(可以用`\`来转义,以`\%`来表示真实含义的`%`字符) 
 返回:函数返回被替换过后的字符串 
 示例: $(patsubst %.c, %.o, x.c bar.c) 返回值格式: x.o bar.o 

 

最后加的clean是为了删除掉.o结尾的文件 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值