[Linux 基础] make、Makefile自动化构建代码工具

在这里插入图片描述

文章目录

  • 1、make与Makefile是什么
  • 2、为什么要有make与Makefile
  • 3、怎么实现一个Makefile文件
    • 3.1 如何编写Makefile文件
      • 3.1.1 依赖关系
      • 3.1.2 依赖方法
    • 3.2 如何清理项目
      • 3.2.1 如何编写
      • 3.2.2 clean详解
    • 3.3 make的使用
    • 3.4 原理
      • 3.4.1 查看文件修改时间

1、make与Makefile是什么

make是一个命令,Makefile是一个在当前目录下存在的一个具有特定格式的文本文件。

2、为什么要有make与Makefile

在VS编译器中,我们在编译执行代码的时候ctrl+f5就可以了,而在linux中我们需要使用gcc/g++ 配合选项并需要正确的格式才可以完成编译,这样是比较麻烦的,我们make与Makefile可以实现自动化构建代码的,当写好代码,只需要一个make指令就能完成整个文件的自动编译。
并且我们写gcc的时候可能会有错误,但是我们直接写到文件中,一次写正确,后面直接使用即可;
我们能够编译,也要能够清理,也是这个道理,我们一次写正确,后面直接使用即可。

3、怎么实现一个Makefile文件

首先我们先创建一个makefile文件,这里makefile单词一定要输入正确,不能出现错误,首字母m可大写可小写,我这里是大写。

touch Makefile/makefile //首字母m大写/小写都可以 

在这里插入图片描述

3.1 如何编写Makefile文件

Makefile是当前目录下的一个普通文本文件,内容包含依赖关系和依赖方法
首先先进入Makefile文件中,然后输入以下内容

test:test.cgcc -o test test.c     

注意:我们在输入gcc 指令这一行的时候,必须要tab键。

3.1.1 依赖关系

在上面的Makefile中,test 依赖于 test.c

3.1.2 依赖方法

上面的Makefile中,gcc -o test test.c 就是依赖方法

3.2 如何清理项目

3.2.1 如何编写

首先进入Makefile,输入以下内容

.PHONY:clean
clean:rm -f test

![在这里插入图片描述](https://img-blog.csdnimg.cn/9d876e620e5f4da093328519e74993e1

3.2.2 clean详解

  • 工程是需要被清理的
  • 像clean这种,没有被第一个目标文件直接或间接关联,那么它后面所定义的命令将不会被自动执行,不过,我们可以显示要make执行。即命令——“make clean”,以此来清除所有的目标文件,以便重编译。
  • 但是一般我们这种clean的目标文件,我们将它设置为伪目标,用 .PHONY 修饰,伪目标的特性是,总是被执行的。

3.3 make的使用

当我们已经写好了Makefile文件后,我们直接输入make就可以自动编译代码了。

当我们想要清理可执行文件,我们输入make clean即可。
在这里插入图片描述
如果我们在Makefile中先写的是清理,输入make执行的就是清理工作,所以谁在前make就执行谁。
在这里插入图片描述

一般我们将清理工作写在构建的后面。

3.4 原理

1. make会在当前目录下找名字叫“Makefile”或“makefile”的文件。
2. 如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到“test”这个文件,并把这个文件作为最终的目标文件。
3. 如果test文件不存在,或是test所依赖的后面的test.c文件的文件修改时间要比test这个文件新(可以用 touch 测试),那么,他就会执行后面所定义的命令来生成test这个文件。
4. 这就是整个make的依赖性,make会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件。
5. 在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make就会直接退出,并报错,而对于所定义的命令的错误,或是编译不成功,make根本不理。
6. make只管文件的依赖性,即,如果在我找了依赖关系之后,冒号后面的文件还是不在,那么对不起,我就不工作啦。

第三点可能会有疑惑,这里的意思其实是,当我们已经生成了可执行文件后,我们对test.c源文件进行修改,这时test.c的内容发生改变,我们再执行make,这时会生成新的可执行程序,如果没有更新内容,那么我们就没有必要再执行依赖方法。
在这里插入图片描述
此时就是没有更新源文件,我们再去生成的时候就会报错说test是最新的。

3.4.1 查看文件修改时间

使用stat命令可以查看文件的修改时间。

stat 文件名

在这里插入图片描述
这里有三个时间,Access、Modify、Change也叫做ACM时间。

Access:读取或进入文件的时间
Modify:最后一次文件内容改变时间
Change:最后一次文件属性改变时间

当我们对源文件内容进行修改之后,Modify时间会随之改变,这时Change时间也可能会改变,因为文件内容的改变会引发属性发生改变(比如文件的大小),所以change时间可能就会随之改变。
make就是根据源文件的修改时间与可执行文件的时间做对比,来选择是否要重新执行依赖方法。
在这里插入图片描述
这里我们可以看到源文件修改时间大于可执行文件修改时间,此时执行make,就会重新执行依赖方法,生成新的可执行文件。
在这里插入图片描述
在这里插入图片描述
这时可执行文件的时间大于源文件时间,再执行make就无效了,我们可以看看:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/168570.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么索引要用B+树来实现呢,而不是B树

首先,常规的数据库存储引擎,一般都是采用 B 树或者 B树来实现索引的存储。 B树 因为 B 树是一种多路平衡树,用这种存储结构来存储大量数据,它的整个高度会相比二叉树来说,会矮很多。 而对于数据库来说,所有…

Java日志系统之Logback

目录 Logback Logback的简单使用 Logback配置文件 log4j.peoperties转化为logback.xml Logback Logback的性能要比log4j要好。 Logback分为三个模块: logback-core:其他两个模块的基础模块logback-classic:它是log4j的一个改良版本&am…

小白也会的校园网宽带拨号自动重连设置

开始菜单搜索“任务计划程序”:我这个开始菜单和你们的不太一样,用了StartAllBack设置的,总之能找到这个程序就行了 提示:可以按下“Win R”,打开“运行”,输入taskschd.msc来打开任务计划程序 点击“任务…

最新咸鱼签名JS逆向分析教程

本章教程,主要分享一下咸鱼H5网页端sign签名算法。 案例地址:https://h5.m.goofish.com/item?id=744640763988 程仅供参考,请勿滥用,由此带来的法律责任,需由自己承担。 目录 一、参数分析 二、逆向过程

浅谈 docker run 命令中的 -i -t 和 -d 选项

以 docker Ubuntu 镜像为例,ubuntu镜像启动时默认执行的命令是"/bin/bash"。 文章目录 不带任何选项带 -i 选项带 -i 和 -t 选项-d 选项 不带任何选项 rootubuntu20:~# docker run ubuntu:20.04 rootubuntu20:~# docker ps CONTAINER ID IMAGE …

【Unity地编细节】为什么Unity笔刷在地形上面刷不出来

👨‍💻个人主页:元宇宙-秩沅 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 秩沅 原创 😶‍🌫️收录于专栏:unity细节和bug 😶‍🌫️优质专栏 ⭐【…

渗透测试tomcat错误信息泄露解决办法

解决方法&#xff1a; 1、使用tomcat8.5.16&#xff0c;会重定向非法url到登录url 2、配置server.xml&#xff0c;加上 <Valve className"org.apache.catalina.valves.ErrorReportValve" showReport"false" showServerInfo"false" />配置…

Linux:firewalld防火墙-基础使用(2)

上一章 Linux&#xff1a;firewalld防火墙-介绍&#xff08;1&#xff09;-CSDN博客https://blog.csdn.net/w14768855/article/details/133960695?spm1001.2014.3001.5501 我使用的系统为centos7 firewalld启动停止等操作 systemctl start firewalld 开启防火墙 systemct…

There are not enough slots available in the system to satisfy the 48 slots报错

文章目录 问题描述解决办法 问题描述 多核运行时出现这个错误&#xff0c;减少核数运行正常 解决办法 输出命令 vim ~/.bashrc添加 alias mpirunmpirun --oversubscribe执行命令 source ~/.bashrc解决。

nginx安装详细步骤和使用说明

下载地址&#xff1a; https://download.csdn.net/download/jinhuding/88463932 详细说明和使用参考&#xff1a; 地址&#xff1a;http://www.gxcode.top/code 一 nginx安装步骤&#xff1a; 1.nginx安装与运行 官网 http://nginx.org/1.1安装gcc环境 # yum install gcc-c…

Power BI 傻瓜入门 1. 数据分析术语:Power BI风格

本章内容包括&#xff1a; 了解Power BI可以处理的不同类型的数据了解您的商业智能工具选项熟悉Power BI术语 数据无处不在。从你醒来的那一刻到你睡觉的时候&#xff0c;某个系统会代表你收集数据。即使在你睡觉的时候&#xff0c;也会产生与你生活的某些方面相关的数据。如…

一款功能强大的音乐曲谱软件Guitar Pro 8 .1.1for Mac 中文破解版

Guitar Pro 8 .1.1for Mac 中文破解版是一款功能强大的音乐曲谱软件&#xff0c;非常适合学习如何玩&#xff0c;改进技巧&#xff0c;重现喜爱的歌曲或陪伴自己。可以帮助我们进行吉他的学习、绘谱与创作&#xff0c;它包含了几乎所有的吉他现有指法及音色&#xff0c;在做弹拨…

UiPath:一家由生成式AI驱动的流程自动化软件公司

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 总结&#xff1a; &#xff08;1&#xff09;UiPath(PATH)的股价并没有因为生成式AI的炒作而上涨&#xff0c;但很可能会成为主要受益者。 &#xff08;2&#xff09;即使在严峻的宏观环境下&#xff0c;UiPath的收入还在不…

2023年中国二手车交易行业发展历程及趋势分析:整体规模仍保持稳定增长[图]

二手车交易主要内容包括&#xff1a;二手车评估前期工作、技术状况鉴定、寄卖、置换业务、价格评估、交易实务。主要手续包括车务手续、车辆保养维修手续、税费手续。 二手车交易行业分类 资料来源&#xff1a;共研产业咨询&#xff08;共研网&#xff09; 未来&#xff0c;二…

1.顺序表-头插、头删、尾插、尾删

文章目录 简介1.头插功能2.头删功能3.尾插功能4.尾删功能5.此程序共包含4个文件&#xff0c;2个.c文件和2个.h文件5.1 SeqList.h文件5.2 SeqList.c文件5.3 test.h文件5.4 test.c文件 6.测试结果6.1 测试尾插和尾删的运行结果6.2 测试头插和头删的运行结果 7.温馨提示 简介 本文…

【Javascrpt】比较,逻辑运算符

目录 比较运算符 逻辑运算符 &&(与&#xff09; ||&#xff08;或&#xff09; 两真&#xff08;||左侧为真&#xff0c;||右侧为真&#xff09; 两假&#xff08;||左侧为假&#xff0c;右侧为假&#xff09; 一真一假&#xff08;||一侧为假&#xff0c;另一侧为…

解析Apache Kafka中的事务机制

这篇博客文章并不是关于使用事务细节的教程&#xff0c;我们也不会深入讨论设计细节。相反&#xff0c;我们将在适当的地方链接到JavaDocs或设计文档&#xff0c;以供希望深入研究的读者使用。 为什么交易? 我们在Kafka中设计的事务主要用于那些显示“读-进程-写”模式的应用…

使用Kali进行实验---主机发现

主机发现 【实训目的】 掌握主机扫描的工作原理&#xff0c;学会使用ping等扫描工具&#xff0c;发现网络当中活跃的主机。 【场景描述】 在虚拟机环境下配置4个虚拟系统“Win XP1” “Win XP2” “Kali Linux”和“Metasploitable2”&#xff0c;使得4个系统之间能够相互通…

有哪些适用于 Windows 的PDF 阅读器?免费 PDF 阅读器清单

探索适用于 Windows 10 和 11 的最佳 PDF 阅读器 适用于 Windows 10 和 Windows 11 的最佳 PDF 阅读器让您可以在台式计算机上查看和共享文档。 最好的PDF 编辑器和免费的 PDF 编辑器配备了先进的工具&#xff0c;可以跨不同的操作系统工作。但是&#xff0c;当您只需要查看和…

网络入门基础

网络入门基础 文章目录 网络入门基础网络的发展协议的概念网络协议初识协议分层层状结构OSI七层模型TCP/IP五层(或四层)模型TCP/IP模型和计算机软硬体系结构的关系 网络传输基本流程同局域网的两台主机通信不同局域网的两台主机通信 网络中的地址管理认识IP地址认识MAC地址 网络…