【Linux 06】项目自动化构建工具 make / makefile

🌈 Ⅰ make / makefile 介绍

1. 什么是 make / makefile

  • make:是一个构建 C / C++ 项目的工具 / 命令
  • makefile:是一个包含编译命令与源代码处于同一目录的的脚本文件

2. 为何存在 make / makefile

  • 当一个工程下有很多个源文件需要使用 g++ 进行编译时,编写 g++ 命令就显得比较复杂。
  • 因此就引入了 make / makefile 实现 自动化编译,只需 make 一下整个工程就自动编译。

🌈 Ⅱ makefile 文件规则

1. makefile 创建

  • makefile 本质是一个脚本文件,需要自行创建并编写。

在这里插入图片描述

2. makefile 格式

1. 编写 makefile 格式

目标:依赖
[tab键]命令
  • 目标:make 要调用的目标是什么。
  • 依赖:执行对应的命令需要依赖于什么,依赖可以为空。
  • 命令:对应目标需要执行什么操作
    • 注意:命令前必须有一个 tab 键;可以有多个命令,但是必须每个命令独占一行。

2. 调用 makefile 格式

在命令行输入下列指令即可

  • make:直接调用 makefile 文件中的第一个目标。
  • make + 目标名称:调用 makefile 文件中的其余目标。

3. makefile 示例

  • 当前有一个 test.cpp 文件。

在这里插入图片描述

1. 编写 makefile 文件

在这里插入图片描述

  • 在当前 makefile 文件中,目标是 666,依赖是 test.cpp 文件,命令是 g++ -o test.exe test.cpp。
  • 意思是 g++ -o test.exe test.cpp 命令依赖于 test.cpp 文件才能执行,目标 666 就是为了调用该命令去生成可执行程序 test.exe。
  • 目标可以是任意名字,但为了方便阅读,建议尽量使目标名和编译产生的可执行程序名一致

在这里插入图片描述

2. 调用 makefile 文件

  • 直接在命令行输入 make 即可 (不带目标默认执行第一个目标),会在当前目录寻找 makefile 文件,然后调用目标所对应的指令。

在这里插入图片描述

🌈 Ⅲ 使用 .PHONY 强制执行目标

1. 格式

.PHONY:目标
目标:[依赖]
	命令

2. 概念

  • 在 makefile 中的某些目标是要满足条件才能被调用的,如上述例子中的 test.exe 目标,如果 test.cpp 文件未被修改,则该目标就只能被调用一次。

在这里插入图片描述

  • 可以用 .PHONY 修饰目标,被 .PHONY 修饰的目标总能被执行

3. 示例

  • 现在要为 makefile 文件添加一个清理生成的目标文件的功能 clean。
  • 在 makefile 文件里多加一个目标 (起名叫 clean),作用就是清理 test.exe 文件。

在这里插入图片描述

  • 直接在命令行输入 make clean ,就能清理掉产生的 test.exe 文件了,且 clean 总能被执行。

在这里插入图片描述

🌈 Ⅳ makefile 文件万能化

概念引入

  • 在实际开发中,makefile 文件是不会像下面这么写的。
  • 如果要更换编译的文件,那么 makefile 中要修改的内容就太多了。

在这里插入图片描述

1. 用符号表示目标和依赖

  • makefile 中可用一些特殊的符号表示依赖文件和目标文件。
  • 改变这些特殊符号变量的值就可以随意更改要编译和生成的可执行程序文件了。
变量说明
@表示目标,会用 @ 替换成对应的目标
^表示所有的依赖,会用 ^ 替换成对应的依赖

在 makefile 中取出变量的内容

  • 在 makefile 中,可以使用 $ 来取出对应变量内存储的值
    • 如: $@,$^,就是取出这两个特殊变量内的值。

示例

在这里插入图片描述

在这里插入图片描述

2. makefile 支持定义变量

  • 既然已经使用 @ 和 ^ 符号在命令行中表示了目标和依赖。
  • 在 makefile 文件中,敲出来的 test.cpp 和 test.exe 本质上都是字符串。
  • 是字符串就能使用变量存储,之后就可以使用变量来代替实际的目标和依赖文件了。

示例

在这里插入图片描述

在这里插入图片描述

  • 之后要更换编译的文件和可执行程序,直接将 code.cpp 和 code.exe 替换即可。
  • 37
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值