【Linux】linux自动化构建工具make/makefile

linux自动化构建工具make/makefile

  • 一,makefile是什么
  • 二,如何写makefile
  • 三,文件的三个时间属性
  • 四,makefile的推导

一,makefile是什么

对于makemakefile,简单来说,make是一个命令,用来执行makefile里面编写的编译命令。而makefile(Makefile)是一个文件,里面编写了对源文件,目标文件的一些相互依赖关系

举个例子,当我们在Linux中写了一个.c的C语言文件时,我们通常会在命令行输入 gcc -o 目标文件 源文件 ,但是如果我们同时要编译好几个文件,而且当项目比较庞大时,我们还能在命令行输入吗?
所以,make和makefile可以实现“自动化编译”,只需要make一下,这个庞大的项目就可以自动编译完成。

二,如何写makefile

make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法

这里实现一个简单的例子:
在Linux下写一个C代码文件
在这里插入图片描述
编写makefile
在这里插入图片描述
这里的mytest-d表示的是目标文件,test.c表示的是要编译的源文件,第二行则是编译指令。
这里的 .PHONY: 表示的是将clean修饰为了伪目标,表示可以反复执行。

这里做一下演示:
在这里插入图片描述
再次 make 时,则不能再执行。
在这里插入图片描述
但是可以多次 make clean
在这里插入图片描述

注:这里 make 的时候,会编译生成可执行文件,而要删除生成的可执行文件,要 make clean 。这是因为makefile和make形成目标文件时,默认从上到下扫描makefile文件,默认生成第一个,而且只生成一个。

三,文件的三个时间属性

根据上面的问题,下面来解释一下为什么会出现上述问题。

这是因为第一次make的时候,没有可执行文件,则make形成可执行文件,当第二次make的时候,当前的可执行文件的最近修改时间比源文件的最近修改时间新,所以不会再编译。

这里介绍一下文件的三个时间:分别是
Accsee —文件访问时间
Moify —文件内容修改时间
Change —文件属性修改时间

在这里插入图片描述
当对文件的内容做修改时,该文件的Modify和Change的时间都会被修改,所以当改变文件的属性时,修改时间发生了变化,再次make时,会比源文件的最近修改时间新。

四,makefile的推导

看下面的makefile文件内容:
在这里插入图片描述
这里的processbar依赖main.o和process.o文件,这里会继续向下执行找到相应的.o文件,然后再倒推回去。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

全网第一篇把Nacos配置中心服务端讲明白的

入口 getServerConfig对应:ConfigQueryRequestHandler�getBatchServiceConfig对应:ConfigChangeBatchListenResponse�admin对应:ConfigController 我们重点就要2个,一个是服务端如何完成客户端获取配置请…

Springboot简单设计两级缓存

两级缓存相比单纯使用远程缓存,具有什么优势呢? 本地缓存基于本地环境的内存,访问速度非常快,对于一些变更频率低、实时性要求低的数据,可以放在本地缓存中,提升访问速度 使用本地缓存能够减少和Redis类的远…

你知道网页采集工具吗?

一、网页采集器的定义和作用 网页采集器是一种自动化工具,用于从互联网上获取信息并将其保存到本地或远程数据库中。其作用在于帮助用户快速、自动地收集并整理网络上的信息,提高工作效率并且节省时间成本。网页采集器通过模拟人工浏览网页的行为,访问并提取目标网页的数据…

L1-037 A除以B-java

输入样例1: -1 2输出样例1: -1/2-0.50输入样例2: 1 -3输出样例2: 1/(-3)-0.33输入样例3: 5 0输出样例3: 5/0Error java import java.util.*; class Main{public static void main(String[] args){Sc…

机器学习中常用的性能度量—— ROC 和 AUC

什么是泛化能力? 通常我们用泛化能力来评判一个模型的好坏,通俗的说,泛化能力是指一个机器学期算法对新样本(即模型没有见过的样本)的举一反三的能力,也就是学以致用的能力。 举个例子,高三的…

BUUCTF-Real-[ThinkPHP]IN SQL INJECTION

目录 漏洞描述 漏洞分析 漏洞复现 漏洞描述 漏洞发现时间&#xff1a; 2018-09-04 CVE 参考&#xff1a;CVE-2018-16385 最高严重级别&#xff1a;低风险 受影响的系统&#xff1a;ThinkPHP < 5.1.23 漏洞描述&#xff1a; ThinkPHP是一款快速、兼容、简单的轻量级国产P…

Stable Diffusion 模型下载:ReV Animated

文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十下载地址模型介绍 该模型能够创建 2.5D 类图像生成。此模型是检查点合并,这意味着它是其他模型的产物,以创建从原始模型派生的产品。 条目内容类型大模型

游戏视频录制软件推荐,打造专业电竞视频(3款)

随着游戏产业的快速发展&#xff0c;越来越多的玩家开始关注游戏视频录制软件。一款好的录制软件不仅可以帮助玩家记录游戏中的精彩瞬间&#xff0c;还可以让其与他人分享自己的游戏体验。接下来&#xff0c;我们将介绍三款热门的游戏视频录制软件&#xff0c;并对其进行详细的…

pwn学习笔记(2)

pwn学习笔记&#xff08;2&#xff09; 1.三种常见的寄存器&#xff1a; ​ ax寄存器&#xff1a;通用寄存器&#xff0c;可用于存放多种数据 ​ bp寄存器&#xff1a;存放的是栈帧的栈底地址 ​ sp寄存器&#xff1a;存放的是栈顶的地址 2.栈帧与栈工作的简介&#xff1a…

arping交叉编译

arping命令依赖libpcap和libnet&#xff0c;需要先交叉编译这两个库。 1.交叉编译libpcap 下载libpcap源文件&#xff0c;从github上克隆: git clone https://github.com/the-tcpdump-group/libpcap.git source交叉编译环境 # environment-setup是本机的交叉编译环境, 里面…

Centos7配置登录失败处理导致root被锁定处理办法

1、应用场景 root用户被系统锁定&#xff0c;无法登录系统。 2、问题现象 root锁定无法登录系统 3、原因 设置登录失败处理并对root用户生效&#xff0c;一直尝试错误的root密码或暴力破解root密码&#xff0c;导致无法自动解锁Linux的root账户 4、解决方案 1.将虚拟机开…

0 代码自动化测试:RF 框架实现企业级 UI 自动化测试

前言 现在大家去找工作&#xff0c;反馈回来的基本上自动化测试都是刚需&#xff01;没有自动化测试技能&#xff0c;纯手工测试基本没有什么市场。 但是很多人怕代码&#xff0c;觉得自动化测试就需要代码&#xff01;代码学习起来很难&#xff01; 当然代码学习不难&#xf…

重生奇迹MU如何挂机

1、重生奇迹MU觉醒哪里挂机经验多挂机收益最大化&#xff0c;在重生奇迹MU中玩家可以通过副本获得大量的经验和金币&#xff0c;甚至挂机也有不错的收益&#xff0c;对于玩家来说 2、卡利玛神庙、血色城堡、迷失之城、恶魔广场甚至是挂机自动刷怪&#xff0c;组队都会有经验加…

骑砍战团MOD开发(43)-顶点着色技术

一.顶点着色(vertex_color) 实际GPU渲染时有顶点着色和纹理着色两种方式,顶点着色消耗资源小,GPU将顶点颜色通过插值运算进行渲染.常用于同一物体的不同颜色渲染,如青苹果,红苹果,可以使用动态切换顶点颜色实现,而不通过设置纹理图片实现. Direct3D9中可声明灵活顶点格式 stru…

TorchVision的使用方法、更改默认路径

TorchVision的使用 1. 转换和增强图像 torchvision.transforms.v2 参数作用Resize将输入调整为给定大小RandomShortestSize随机调整输入的大小RandomResize随机调整输入的大小RandomCrop在随机位置裁剪输入RandomResizedCrop裁剪输入的随机部分并将其调整为给定大小RandomIoU…

为什么PCB地与金属机壳用阻容连接?

笔者电子信息专业硕士毕业&#xff0c;获得过多次电子设计大赛、大学生智能车、数学建模国奖&#xff0c;现就职于南京某半导体芯片公司&#xff0c;从事硬件研发&#xff0c;电路设计研究。对于学电子的小伙伴&#xff0c;深知入门的不易&#xff0c;特开次博客交流分享经验&a…

Java的值传递与“引用传递”辨析

目录 Java的值传递与“引用传递”辨析1. 传递方式概述2. 值传递示例3. “引用传递”示例4. 值传递与"引用传递"的实际应用5. 总结&#xff1a;java只有值传递 Java的值传递与“引用传递”辨析 欢迎来到本博客&#xff0c;今天我们将深入研究Java中是值传递还是引用传…

【文件增量备份系统】前端项目构建

文章目录 创建项目安装项目依赖引入element plus组件下载组件在main.js中使用组件测试 整合路由router下载组件创建路由管理器index.js使用路由App.vue上面使用 <router-view />测试 整合axios下载组件工具类axiosRequest.js工具类使用 创建项目 damwangrunqindeMBP dev…

蓝桥杯刷题day06——平均

1、题目描述 有一个长度为n 的数组&#xff08;n 是 10 的倍数&#xff09;&#xff0c;每个数ai都是区间 [0,9] 中的整数。 小明发现数组里每种数出现的次数不太平均&#xff0c;而更改第i 个数的代价为bi&#xff0c; 他想更改若干个数的值使得这10 种数出现的次数相等&…

论文阅读-一个用于云计算中自我优化的通用工作负载预测框架

论文标题&#xff1a;A Self-Optimized Generic Workload Prediction Framework for Cloud Computing 概述 准确地预测未来的工作负载&#xff0c;如作业到达率和用户请求率&#xff0c;对于云计算中的资源管理和弹性非常关键。然而&#xff0c;设计一个通用的工作负载预测器…