构建无忧:探索 Linux 项目自动化构建神器-make/Makefile

news2024/11/24 10:37:12

在这里插入图片描述

目录

  • 一.make/Makefile的介绍
    • 1.理解make/Makefile
    • 二.make/Makefile的使用
      • 1.基本使用
      • 2.PHONY
      • 3.特殊符号拓展

一.make/Makefile的介绍

1.理解make/Makefile

编写Makefile是Linux开发中一项重要的技能,熟练的运用这个工具能提高编译效率,帮助你完成大型工程。Makefile带来的最大好处就是——自动化编译,一旦将Makefile文件写好,只需要一个make命令,即可完成预期的编译,大大提高了软件开发的效率。

二.make/Makefile的使用

1.基本使用

下面我来简单演示下其功能:
例如现在mycode.c文件下编写了如此代码:
在这里插入图片描述
正常情况下我们想要编译这段代码,会进行这样的操作:
在这里插入图片描述
如此一行在只需编译一个文件时倒也不麻烦,但是在以后进行更大规模的开发时,一句一文件的编译就显得繁琐。这时就能用上我们自动化构建工具make/Makefile了。首先我们在同目录下创建Makefile文件用来编写依赖关系与方法:
在这里插入图片描述
其中的clean可以方便删除生成的文件:
现在我们再想编译mycode.c只需输入命令make即可:
在这里插入图片描述

2.PHONY

接下来在我想要多次编译时,其给出了这样的提示:
在这里插入图片描述
他说mycode可执行文件已经是最新的了,没有必要再次编译生成。我们知道文件包括文件内容和文件属性,其中修改时间是文件的重要属性。而自动化构建工具为了提升编译效率做了规定:当源文件的修改时间新与可执行文件时,说明源文件进行了修改,会重新进行编译,反之不会。
在这里插入图片描述
我们在修改过mycode.c的内容后,利用stat命令查看文件属性可以观察到,修改时间发生了变化,这是就可以在使用make再次编译生成了。

Modify:文件内容(修改内容会更新)
Change:文件属性(如文件权限)
Access:访问文件

那如果我们不想通过比较时间直接能编译文件该如何操作呢?这里就要了解到PHONY
PHONY修饰的称为伪目标,其特点就是总是被执行的。
在这里插入图片描述

在这里插入图片描述
PHONY使得某个依赖关系总是被执行。

3.特殊符号拓展

我们可以使用 $^ 代替依赖关系中冒号右边的文件$@ 代表冒号左边的文件 如果冒号右边有多个文件时可以用 $< 代表第一个文件:
在这里插入图片描述

在这里插入图片描述
从上图我们可以看到输入make命令后,会显示我们编写的依赖方法,如果我们不想显示,可以怎么操作呢?
在这里插入图片描述
这样再进行操作时就不会有任何提示了。
在这里插入图片描述

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

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

相关文章

【Java系列】Java虚拟机—类加载器介绍

什么是Java虚拟机 Java虚拟机&#xff08;Java Virtual Machine&#xff0c;JVM&#xff09;是一个能够执行 Java 字节码的虚拟计算机。它是 Java 技术的核心部分&#xff0c;是 Java 应用程序运行的基础。 Java 程序在编译后会生成字节码&#xff08;bytecode&#xff09;&am…

【动手学习深度学习--逐行代码解析合集】07多层感知机的简洁实现

【动手学习深度学习】逐行代码解析合集 07多层感知机的简洁实现 视频链接&#xff1a;动手学习深度学习–softmax回归简洁实现 课程主页&#xff1a;https://courses.d2l.ai/zh-v2/ 教材&#xff1a;https://zh-v2.d2l.ai/ 1、代码 import torch from torch import nn from d…

uni-app crypto-js DES 加解密 ,支持app , h5,小程序

crypto-js DES 加解密 &#xff0c;支持app,h5&#xff0c;小程序 第一步 npm install crypto-js 可以直接下载示例运行&#xff0c;看控制台打印 下载地址 https://ext.dcloud.net.cn/plugin?id13351 crypto-js DES 加解密 - DCloud 插件市场

科技富豪抑郁了

原美团二当家王慧文据说抑郁了 什么能解决抑郁问题&#xff1f; 趣讲大白话&#xff1a;科技富豪也抑郁 【趣讲信息科技216期】 **************************** 王富豪创立光年之外AI公司2个月就休息了 知识解决不了抑郁问题 抑郁是现代社会一个常见的症状 是压力所带来的综合症…

牛客网Verilog刷题——VL39

牛客网Verilog刷题——VL39 题目答案 题目 设计一个自动贩售机&#xff0c;输入货币有两种&#xff0c;为0.5/1元&#xff0c;饮料价格是1.5/2.5元&#xff0c;要求进行找零&#xff0c;找零只会支付0.5元。 1、投入的货币会自动经过边沿检测并输出一个在时钟上升沿到1&#x…

HTML-表格、表单标签

目录 表格标签 表单标签 表单项标签 表格标签 场景&#xff1a;在网页中以表格&#xff08;行、列&#xff09;形式整齐展示数据&#xff0c;如班级表标签 标签描述属性/备注<table>定义表格整体&#xff0c;可以包裹多个<tr>border:规定表格边框的宽度width&am…

盖雅劳动力管理云完成多方信创适配,打造信创产业生态

为响应国产化和信创战略需求&#xff0c;盖雅工场积极推动产品适配国产操作系统、国产数据库、国产硬件设备和国产处理器&#xff0c;不断拓展公司信创产业链技术升级。 近日&#xff0c;盖雅工场顺利完成多方信创适配&#xff0c;成功与 麒麟Kylin、鲲鹏Kunpeng、达梦数据库…

一键ai绘画怎么使用你清楚吗?

在当代科技的浪潮中&#xff0c;人工智能绘画生成器犹如一位神奇的画笔&#xff0c;以其特别的创造力&#xff0c;将数字代码转化成令人惊叹的艺术杰作。它就像是一位天才魔术师&#xff0c;能从虚无中诞生出栩栩如生的图像&#xff0c;给人们带来触动和美感。 看着这些ai绘画…

VOC数据集介绍以及读取(目标检测object detection)

VOC&#xff08;Visual Object Classes&#xff09;数据集是一个广泛使用的计算机视觉数据集&#xff0c;主要用于目标检测、图像分割和图像分类等任务。VOC数据集最初由英国牛津大学的计算机视觉小组创建&#xff0c;并在PASCAL VOC挑战赛中使用。 VOC数据集包含各种不同类别…

今晚打老虎:用katalon解决接口/自动化测试拦路虎--参数化

#全局变量 右侧菜单栏中打开profile&#xff0c;点击default&#xff0c;打开之后&#xff0c;在default页面点击add添加全局变量 如果你想学习接口自动化测试&#xff0c;我这边给你推荐一套视频&#xff0c;这个视频可以说是B站播放全网第一的接口自动化测试教程&#xff0c…

ux-grid实现表格排序

需求说明&#xff1a; 1、第一行不参与排序 2、实现带%排序 3、实现null值排序 4、实现值相等不排序 5、实现含有占位符‘–‘排序放到最后 表格属性说明文档 效果图如下&#xff1a; 代码如下&#xff1a; <template><div><ux-gridhighlightCurrentRow:data&…

JavaScript 使用canvas绘制随机生成图形验证码

文章目录 HTML 结构准备CSS 样式准备JavaScript 逻辑部分首先做个准备&#xff1a;声明一个空数组用来随机生成验证码封装一个为canvas标签渲染的函数&#xff0c;用来随机生成验证码还需要封装一个用来生成随机颜色的函数获取到canvas标签为其绑定点击事件为按钮绑定判断点击事…

day1-若依项目前后端分离的初步使用

响应式布局: 做好的产品能在pc端,手机,平板都能正常浏览 开发项目两种方式 1.自己从0开始写代码 2.在若依中下载拥有基础功能的源码 若依使用的mysql版本 mysql5.7 导入别人的项目如何操作 若依项目下载地址**:https://gitee.com/y_project/RuoYi-Vue.git** 可以使用揉…

数学建模——曲线拟合

一、曲线拟合简介 1、曲线拟合问题的提法 已知一组数据&#xff08;二维&#xff09;&#xff0c;即平面上n个点 (xi,yi)(i1,2,…,n)&#xff0c; xi互不相同。寻求一个函数yf(x)&#xff0c;使得f(x)在某种准则下与所有的数据点最为接近&#xff0c;即拟合得最好。 2、…

LabVIEW仿真单频脉冲信号+线性调频信号+高斯白噪声信号

文章目录 前言一、单频脉冲信号1、信号参数2、仿真图①、前面板②、程序框图 二、线性调频信号1、信号参数2、仿真图①、前面板②、程序框图 三、高斯白噪声信号1、信号参数2、仿真图①、前面板②、程序框图 四、合成信号1、前面板2、程序框图 五、代码自取 前言 本文基于 Lab…

5.1.4.8 RDD 持久化

1) RDD Cache 缓存 RDD 通过 Cache 或者 Persist 方法将前面的计算结果缓存&#xff0c;默认情况下会把数据以缓存 在 JVM 的堆内存中。但是并不是这两个方法被调用时立即缓存&#xff0c;而是触发后面的 action 算 子时&#xff0c;该 RDD 将会被缓存在计算节点的内存中&…

应用案例 | 使用tManager ControlLogix模块优化食品生产研发流程

探索tManager在食品制造应用中如何创建实时时间戳的过程数据&#xff0c;从而改善产品的开发流程。 一 背景 为了在当今以数据驱动的制造环境中取得成功&#xff0c;车间控制系统必须能够与企业计算系统进行信息交换。对此&#xff0c;事务管理器&#xff0c;像Softing的tMana…

银河麒麟服务器v10 sp1 安装 nginx

首先查询是否安装&#xff1a; rootxxx-pc:~# ps -ef |grep nginx 或 rootxzx-pc:~# dpkg -list|grep nginx 如果安装请先卸载&#xff0c;或者直接使用&#xff0c;以下步骤你就可以忽略了&#xff0c;软件包的卸载方法&#xff1a; 1、APT方式 &#xff08;1&#xff09…

牛客网Verilog刷题——VL40

牛客网Verilog刷题——VL40 题目答案 题目 设计一个同时输出7分频的时钟分频器&#xff0c;占空比要求为50%。注意rst为低电平复位。   信号示意图如下&#xff1a; 波形示意图如下。 输入输出描述&#xff1a; 信号类型输入/输出位宽描述clk_inwireIntput1系统时钟信号rs…