网站在线咨询模块东营市招投标信息网

news/2025/9/27 12:34:54/文章来源:
网站在线咨询模块,东营市招投标信息网,有源码手机怎么搭建网站,天津市建设安全协会网站#x1f389;博主首页#xff1a; 有趣的中国人 #x1f389;专栏首页#xff1a; Linux #x1f389;其它专栏#xff1a; C初阶 | C进阶 | 初阶数据结构 小伙伴们大家好#xff0c;本片文章将会讲解Linux中项目自动化构建工具make/makefile的相关内容。 如果看到最后… 博主首页 有趣的中国人 专栏首页 Linux 其它专栏 C初阶 | C进阶 | 初阶数据结构 小伙伴们大家好本片文章将会讲解Linux中项目自动化构建工具make/makefile的相关内容。 如果看到最后您觉得这篇文章写得不错有所收获麻烦点赞、收藏、留下评论。您的支持是我最大的动力让我们一起努力共同成长 文章目录 1. 何为make/makefile2. make/makefile的原理3. makefile中的变量以及自动显示问题4. makefile 目标文件的生成顺序 1. 何为make/makefile 当谈到在Linux中进行项目构建时make和makefile是两个非常重要的工具。它们提供了一种自动化构建的方法使得开发者能够轻松地编译和构建复杂的软件项目。下面我会分别介绍一下make和makefile。 ⏳ make 简介⌛ make 是一个命令行工具指令用于自动化构建程序或项目。它通过读取一个称为 makefile 的文件来确定构建项目所需的步骤。make工具的核心理念是根据文件之间的依赖关系以及每个文件的修改时间决定哪些文件需要重新编译从而实现高效的构建。 ⏳ makefile 简介⌛ makefile 是一个文本文件其中包含了一系列规则和命令用于指导 make 工具如何构建项目。makefile 定义了项目中的各种组件例如源文件、目标文件和依赖关系以及如何将它们组合在一起以生成最终的可执行文件或库文件。 2. make/makefile的原理 ⏳ 我们先来看一个例子⌛ 首先新建一个名为code.c的文件并写入一段简单的代码 # 新建名为code.c的文件 [dsjalicloud-dsj lesson11]$ touch code.c # code.c中所输入的代码#include stdio.h int main(){ int i 0; for (i 0;i 10; i) {printf(%d\n,i); } return 0; } 新建一个名为makefile或者Makefile的文件并在其中输入以下代码 code.exe:code.c gcc -o code.exe code.c.PHONY: clean clean: rm -f code.exe 退出并依次输入make和make clean指令 输入make指令 [dsjalicloud-dsj lesson11]$ ll total 20 -rw-rw-r-- 1 dsj dsj 116 May 9 21:33 code.c -rwxrwxr-x 1 dsj dsj 8360 May 9 21:38 code.exe -rw-rw-r-- 1 dsj dsj 79 May 9 21:36 makefile 输入make clean指令 ⏳ 原理解释⌛ 看完之后我们可能对make/makefile有以下几点疑问 1. makefile文件中的代码是什么意思 2. 为什么输入make就能生成code.exe的文件而不是 make code.exe 接下来我来一一解释这几个问题 问题1makefile文件中的代码是什么意思 我们把code.exe 称为目标文件code.c称为依赖关系下面的指令gcc -o code.exe code.c称为依赖方法。 目标文件targets指定要构建的文件或操作的名称。这可以是可执行文件、目标文件、清理操作等。 依赖关系Dependencies 指定每个目标所依赖的文件或操作。如果某个目标的依赖文件发生了变化那么该目标就需要重新构建。有时依赖关系可以省略。依赖关系也可以有多个。 依赖方法Commands指定 make 工具执行的操作步骤。这些操作通常是编译源代码、链接目标文件、复制文件等。有时可以有多个依赖方法。 这个搞明白了那clean这个目标文件前面一行的.PHONY又是什么意思呢 我们先了解一个概念makefile中的操作默认是只执行一次的因为这样可以提高编译的效率。 .PHONY.PHONY 是告诉 make 工具该目标不是实际的文件而是一个动作或操作并且这个操作总是要被执行的。 总是要执行的意思就是只要你输入了指令make clean这个指令那么对应的操作方法就要被执行。 那么问题又来了只执行一次是怎么做到的呢 首先我们可以用命令 stat [filename] 来查看一个文件的修改时间 其次对于每个要生成的目标文件要依赖于依赖关系而我们也可以查看这些依赖关系中的文件的修改时间也可以查看目标文件的修改时间 如果 目标文件修改时间 先于 依赖文件的修改时间说明依赖文件在编译后进行了修改那么执行make指令就 会 重新生成一个目标文件。 反之如果 目标文件修改时间 晚于 依赖文件的修改时间说明依赖文件并没有进行修改那么执行make指令 就 不会 重新生成一个目标文件。 那我们来验证一下看一下下面的例子吧 目标文件 修改时间 晚于 依赖文件 修改时间的例子 目标文件 修改时间 早于 依赖文件 修改时间的例子 问题2 为什么输入make就能生成code.exe的文件而不是make code.exe 因为make指令会默认生成 makefile 中的第一个目标文件。但是输入make code.exe也是可以的。 3. makefile中的变量以及自动显示问题 在makefile中我们可以用$来代替目标文件$^来代替依赖关系文件例如 也是可以编译通过的 在makefile中也是可以出现变量的但是这里的变量和其他编程语言有些不同先看个例子吧 注意定义变量的时候不能出现空格除非依赖多个文件 也是可以编译通过的 我们发现在每次输入make指令的时候都会打印出他所执行的指令例如 我们可以修改相关的makefile代码只需要在每个依赖方法之前加上符号即可使得它不出现 不加符号 make一下会发现他把他所执行的指令和我们要让他打印的东西一起打印了 加符号 make一下会发现他并没有把他所需要执行的指令打印出来只打印了我们让他打印的东西 4. makefile 目标文件的生成顺序 看一下这个makefile文件 源码 code.exe: code.sgcc -o $ $^ code.o: code.sgcc -o $ -c $^ code.s: code.igcc -o $ -S $^ code.i: code.cgcc -o $ -E $^.PHONY:clean clean:rm -f code.i code.s code.o code.exe 如果我们直接make由于找不到依赖文件code.s但是此时不会停止执行会继续向下寻找但是向下找到了code.o文件但是它的依赖文件是code.s文件因为此时没有code.c文件会继续向下寻找…… 可以发现这类似于递归的一个过程没找到就会继续递归直到找到为止。 当然如果最后还是找不到需要的依赖文件就会报错。 报错示例 当然由于make指令默认生成的是第一个目标文件所以指挥生成和第一个目标文件相关的内容我们可以改一下顺序来验证一下咱们将.o放在第一个 那如果咱们再改一下顺序把.o需要的.s文件不放在直接顺序上的下一个会怎么样呢 可以发现还是可以的不会报错。 所以说只要makefile文件中给出了所需要的依赖文件make都能帮你找到不会报错

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

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

相关文章

dede网站地图怎么做lamp网站开发 pdf

为什么80%的码农都做不了架构师?>>> 介绍 在本系列的第一篇文章中,安装了Node.js、Ignite的Node.js瘦客户端包,并且测试了一个示例应用。在本文中,可以看一下Ignite在处理其它数据源(比如关系数据库&#…

InteractiveCommunication Problems

/偏向于前者。CSP 初赛塞了两个交互,有点慌。

JSON 框架混用避坑指南:FastJSON vs Jackson

`com.alibaba.fastjson.JSON.parseObject()` 方法无法识别 Jackson 的 `@JsonProperty` 注解,导致字段映射失败。 核心矛盾:FastJSON 无法识别 Jackson 的 @JsonProperty 注解目录一、问题定位二、框架对比表三、典…

实用指南:网络通信协议全解析:HTTP/UDP/TCP核心要点

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

企业级大数据技术栈:基于Hadoop+Spark的全球经济指标分析与可视化环境实践

企业级大数据技术栈:基于Hadoop+Spark的全球经济指标分析与可视化环境实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-famil…

网站制作的相关术语西安专业做网站建

连接MySQL数据库时常见故障问题的分析与解决 初学的mysql网友好象经常会碰到mysql无法连接的错误。特开贴收集这样问题的现象和原因。 先自己扔块砖头出来。 归纳如下: 故障现象 : 无法连接 mysql 错误信息1 :ERROR 1045 (28000): Access deni…

若邻接矩阵是三角矩阵,则存在拓扑序列;反之则不一定成立

目录1. 命题回顾2. 前半句:邻接矩阵是三角矩阵 ⇒ 存在拓扑序列2.1 邻接矩阵是上三角矩阵的情况2.2 邻接矩阵是下三角矩阵的情况3. 后半句:反之则不一定成立4. 最终判断1. 命题回顾若邻接矩阵是三角矩阵,则存在拓扑…

Gateway-断言 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

macOS 多 Java 版本管理(jenv 方案)

目录一、目标二、查看已安装的 JDK三、使用 jenv 管理 Java 版本1. 安装 jenv2. 配置 Shell 环境3. 添加已安装的 JDK4. 查看可用版本5. 切换 Java 版本6. 验证版本四、常见问题1. 权限问题2. Shell 配置文件选择错误五…

龙口网站制作价格衡阳网站建设技术外包

操作: 是时机函数,在页面加载前,可以在这两个函数里面做一些事情, 比如发送异步请求。 类似过滤器,或者拦截器。1. axios安装 安装报错,多装几遍,或者用cnpm安装 npm install axios -s npm in…

怎么提高网站关键字排名网站怎么做360免费优化

在数字化浪潮席卷全球的今天,跨境电商业务蓬勃发展,成为推动国际贸易增长的重要引擎。亚马逊,作为全球最大的电商平台之一,以其独特的平台特点和全球化布局,为卖家和买家提供了便捷、高效的交易环境,成为众…

广州搜索seo网站优化建设银行网站字体

免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在…

AI 落地教育智慧招生:从 “热线占线” 到 “724 小时精准应答” 的实践分享

AI 落地教育智慧招生:从 “热线占线” 到 “724 小时精准应答” 的实践分享在教育招生季,家长对 “报名时间”“学区范围”“学校特色” 的咨询需求集中爆发,而传统招生咨询模式往往陷入 “家长急、老师累、效率低”…

软件技术基础第一次课程

这个作业属于哪个课程 https://edu.cnblogs.com/campus/zjlg/25rjjc 这个作业的目标 初步学习博客的发文方法,进行自我评估,有初步的认知 姓名-学号 林靖迪- 2023329301118自我介绍与自我评估自我介绍 我叫林靖迪,是…

服装网站策划设计重庆手机网站制作价格

过几天就要回家了,剩下的工作还有一点没有完成.不过已经是无关大碍了.突然有种很烦的感觉.想想这个暑假的时间里面自己也算是经历不少了,可是回忆一下自己到底收获了什么,脑子里面却是一片空白,什么都想不到.本来是要动笔写篇"我的深圳之行"之类的东西的,可是却没有一…

做网站推广怎么找客户临安区做网站的公司

实现一个标准型计算器及其各项功能的实现 效果图欣赏 是不是看起来很漂亮的呢??? 功能详解: 屏幕显示输入的数字和符号实现加减乘除运算回退和清零功能小数的运算结果的输出 相信小伙伴们都已经迫不及待的想要知道源码了。 代…

石子合并(一排的和一个环的)

石子合并 石子合并是环形dp的经典题,要做它我们首先要做它的弱化版,也就是排成一排的情况:石子合并(弱化版)(洛谷p1775) 石子合并弱化版解法 对于这道题,可以先从简单的情况开始考虑;比如现在要合并a,b,c三堆…

思维题练习

思维题题解合集本文选取题目源于此处,以及一些平时的好的思维题。 大体按照主观难度排序。[FJCPC 2025] 构造大师贝贝 注意到 \(T\leq1000\),但是 \(n\leq10^{12}\)。那么从时间复杂度的角度考虑,应当为一个类似于 …