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

简介: 【Linux】Linux项目自动化构建工具 make/Makefile

1. Makefile 是如何工作的

make 是一个命令。

Makefile 是一个文件,当前目录下的一个文件。

我们先来上手写一个简单的 Makefile 文件,

1. 创建一个叫 Makefile 的文件(首字母可以小写)

2. 编辑这个文件

mycode:mycode.c

mycode:mycode.c,这是个什么?

我们在当前目录下创建了一个叫做 mycode.c 的文件,

这句话的意思是将 mycode.c 文件编译成 mycode,中间用 :隔开,

我们称这个为依赖关系。

那具体怎么编译呢?

gcc -o mycode mycode.c

下面的 gcc -o mycode mycode.c 就叫做依赖方法。

写完之后保存退出。

我们把 mycode.c 的代码编写好:

然后我们就直接输入 make:

他就会根据我们的依赖关系执行对应的依赖方法,这样就生成了 mycode 可执行程序。

那如果我们不想要这个可执行程序了,该怎么办?直接 rm 吗?好像不太好,

我们再次打开 Makefile 文件:

写一个 clean,不依赖任何东西,然后写好依赖方法,

这样当我保存退出后,直接写入 make clean:

就会自动帮我们使用 clean 的方法。

这样当我们再修改我们 mycode.c 的代码之后,

我们就不用再用 gcc 了,可以直接 make clean;make 就能重新构建可执行程序。

2. 依赖关系与依赖方法

还是拿这个来举例,

mycode 依赖于 mycode.c

但是光有依赖关系是办不成任何事情的,

所以就有了下面的依赖方法

而 make 就会在当前路径下查找 Makefile 文件,执行这些依赖关系以及他们的方法。

而 make 会自顶向下扫描,第一个文件就会作为他的默认文件,

所以第一个文件是谁,直接 make 就会执行谁。

3. .PHONY

当我们重复的进行 make 的时候,他不让我们编译了,

因为操作系统检测到我们的源文件没有修改,没有必要重新编译,

那我们怎么样才能让他不限制我们呢?

我们加上这样一个东西,就是告诉系统,不要管我们:

这样我们随便 make 他就不管我们了。

不过我们不太推荐一直可以编译可执行程序,但是清理工作可以这样设置:

4. Makefile 的特殊符号

还是以我们之前的写的 Makefile 文件:

$@ 表示的是依赖关系左边的值

$^ 表示的是依赖关系右边的值

通过这两个符号,我们之后就不用手写了,只需要写好依赖关系,

就可以直接使用这两个符号。

Makefile 学会这些就基本够用了。

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果感到有所收获的话可以给博主点一个哦。

如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~

相关文章
|
3月前
|
关系型数据库 MySQL Java
【Docker最新版教程】一文带你快速入门Docker常见用法,实现容器编排和自动化部署上线项目
Docker快速入门到项目部署,MySQL部署+Nginx部署+docker自定义镜像+docker网络+DockerCompose项目实战一文搞定!
|
4月前
|
测试技术
自动化测试项目学习笔记(五):Pytest结合allure生成测试报告以及重构项目
本文介绍了如何使用Pytest和Allure生成自动化测试报告。通过安装allure-pytest和配置环境,可以生成包含用例描述、步骤、等级等详细信息的美观报告。文章还提供了代码示例和运行指南,以及重构项目时的注意事项。
406 1
自动化测试项目学习笔记(五):Pytest结合allure生成测试报告以及重构项目
|
4月前
|
测试技术 Python
自动化测试项目学习笔记(四):Pytest介绍和使用
本文是关于自动化测试框架Pytest的介绍和使用。Pytest是一个功能丰富的Python测试工具,支持参数化、多种测试类型,并拥有众多第三方插件。文章讲解了Pytest的编写规则、命令行参数、执行测试、参数化处理以及如何使用fixture实现测试用例间的调用。此外,还提供了pytest.ini配置文件示例。
98 2
|
4月前
|
测试技术 Python
自动化测试项目学习笔记(二):学习各种setup、tearDown、断言方法
本文主要介绍了自动化测试中setup、teardown、断言方法的使用,以及unittest框架中setUp、tearDown、setUpClass和tearDownClass的区别和应用。
128 0
自动化测试项目学习笔记(二):学习各种setup、tearDown、断言方法
|
6月前
|
Web App开发 编解码 Linux
使用Selenium自动化测试解决报告生成失败问题及Linux部署指南
这篇文章介绍了使用Selenium自动化测试解决报告生成失败问题的方法,包括Linux环境下的部署指南和代码实现。
82 1
使用Selenium自动化测试解决报告生成失败问题及Linux部署指南
|
6月前
|
jenkins 测试技术 持续交付
解锁.NET项目高效秘籍:从理论迷雾到实践巅峰,持续集成与自动化测试如何悄然改变游戏规则?
【8月更文挑战第28天】在软件开发领域,持续集成(CI)与自动化测试已成为提升效率和质量的关键工具。尤其在.NET项目中,二者的结合能显著提高开发速度并保证软件稳定性。本文将从理论到实践,详细介绍CI与自动化测试的重要性,并以ASP.NET Core Web API项目为例,演示如何使用Jenkins和NUnit实现自动化构建与测试。每次代码提交后,Jenkins自动触发构建流程,通过编译和运行NUnit测试确保代码质量。这种方式不仅节省了时间,还能快速发现并解决问题,推动.NET项目开发迈向更高水平。
65 8
|
5月前
|
安全 Linux 测试技术
Kali Linux预装的自动化渗透测试工具
Kali Linux预装的自动化渗透测试工具
239 2
|
6月前
|
Ubuntu Linux 持续交付
在Linux中,如何在Linux中使用Ansible进行自动化部署?
在Linux中,如何在Linux中使用Ansible进行自动化部署?
|
6月前
|
运维 Linux 持续交付
在Linux中,如何进行配置管理和自动化部署?
在Linux中,如何进行配置管理和自动化部署?
|
6月前
|
jenkins Linux 持续交付
在Linux中,如何使用Jenkins和Ansible进行虚拟化环境的自动化和持续集成/持续部署(CI/CD)?
在Linux中,如何使用Jenkins和Ansible进行虚拟化环境的自动化和持续集成/持续部署(CI/CD)?