Linux - make与makefile

文章目录

  • 什么是make和makefile
  • 如何使用
    • 依赖关系 和 依赖方法
    • 伪目标
  • 写个程序-进度条
    • 换行和回车的区别

什么是make和makefile

make是一个命令
makefile是一个文件

这就是make和makefile的本质
make和 ll , pwd ,su 一样都是命令
makefile和 test , test.c 一样都是文件

如何使用

我们先touch一个makefile文件

touch makefile

我们通过vim进入到makefile里
假如我们需要写一个输出hello makefile 的程序我们在makefile里是如何实现的呢我们先来看写法
在这里插入图片描述
这是我们的test.c
在这里插入图片描述
这是我们的makefile中的内容
当我们想通过test.c直接生成一个可执行的文件的时候我们就直接可以用make
在这里插入图片描述
这里会直接生成一个test的可执行文件
在这里插入图片描述
当我们去执行这个可执行文件的时候我们就可以发现我们直接输出了
hello makefile
但是这很奇怪,我们本来可以直接gcc -o test test.c 这不是多此一举吗?但是当我们的依赖文件变多的时候我们就会发现make和makefile到底有多好用了
接下来我们就需要看看makefile中的那些内容到底是都代表着什么了
在这里插入图片描述
我们先来看第一个test我们称之为目标文件,make的工作原理就是去找makefile中第一个文件作为目标文件也就是我们待会儿可执行的文件,但是这个可执行的文件是通过哪些文件经过编译链接生成得来的呢?所以我们还需要依赖文件列表,这里用到了列表证明依赖文件可以不止一个

依赖关系 和 依赖方法

这里的依赖关系和依赖方法通俗的来讲就是你作为一个大学生,月末了没钱了,你给家里人打电话说:我是某某某,这就叫做表明依赖关系,但是你如果光标明依赖关系,你的家里人知道你要干嘛吗?他们当然知道你是某某某,你是不是得说:月末了手头有点紧,这就叫做表明依赖方法,这样你的家里人才知道奥要给你发点儿生活费了。
这就是依赖关系和依赖方法,在这里写就是,通过依赖文件列表确定目标文件的构成是由哪几个依赖文件构成的,再通过编译器将.c文件也就是源文件编译链接过后变成目标文件串在一起

伪目标

这里有个.PHONY这其实就是个关键词用来修饰为伪目标,我们一般将clean这个目标文件设置成伪目标之后,这里的make就可以一直用,不存在每次都需要clean一下
伪目标的特性是,总是被执行的,所以make就可以一直生成目标文件

写个程序-进度条

讲了那么多我们来实现一个小程序吧
一个进度条
在这里插入图片描述

我不会做动图不好意思儿
大致就是实现一个这样的
一个缓慢的进度条然后后面带个完成度,然后带一个显示键
代码实现通过三个文件–主要是为了展示make的用法,一个文件也可也生成
process.h

  1 #include<stdio.h>2 3 #define Max 100 4 #define signal '#'                                                                                                                                                              5 void process();

process.c

  1 #include"process.h"                                                                  1 #include<stdio.h>2 #include<string.h>                                                                  |  2 3 #include<unistd.h>                                                                  |  3 #define Max 100 4 void process()                                                                      |  4 #define signal '#'                                                                   5 {                                                                                   |  5 void process();6   char arry[Max];                                                                   |~7   memset(arry,'\0',sizeof(arry));                                                   |~8   int cnt = 0;                                                                      |~9   char sig[] = {'/','-','\\','|'};                                                  |~10   while(cnt <= 100)                                                                 |~11   {                                                                                 |~12     printf("[%-100s][%3d%][%c]\r",arry,cnt,sig[cnt%4]);                             |~13     fflush(stdout);                                                                 |~14     arry[cnt++] = signal;                                                           |~15     usleep(50000);                                                                  |~16   }                                                                                 |~17   printf("\n");                                                                     |~18 }          

test.c

 #include"process.h"2 3 int main()4 {5   process();                                                                                                                                                                    6   return 0;7 }

这个usleep是休眠的意思它的单位是微秒就是说一秒 = 1000*1000微秒可以去cplusplus或者直接在Linux上用man去查

主要是我们来看makefile中的写法

在这里插入图片描述

换行和回车的区别

我们写这里的process的时候需要用到\r 这是什么呢这是回车符,回车和换行可不是一个东西,他们是有区别的,那么一张图就能表现出来他们的区别
在这里插入图片描述

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

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

相关文章

REACT 在组件之间共享状态

有时&#xff0c;您希望两个组件的状态始终一起变化。要做到这一点&#xff0c;请从他们俩身上删除状态&#xff0c;将其移动到他们最近的共同父级&#xff0c;然后通过道具将其传递给他们。这被称为提升状态&#xff0c;这是编写 React 代码时最常见的事情之一。 举例提升状态…

正念冥想训练内容有哪些?流静冥想

正念冥想训练内容有哪些&#xff1f; “我做不到感恩&#xff0c;总觉得满世界都是欠我的。”同学A这样说。看得出来她的无奈、无力以及无头绪感。 “我无法对父母做出感恩的祝福&#xff0c;从他们那里我感受不到爱&#xff0c;感受不到关怀&#xff0c;体验不到感恩。”同学…

校园电话机对于校园信息化管理非常重要

任何一部校园电话机都有信息办理渠道&#xff0c;并且发挥着重要的效果&#xff0c;能够满意整个机器的更快速运作。然后使学生能够取得一个更好的运用条件&#xff0c;学生在运用产品的过程中&#xff0c;要经过正确的操作环节才能够发挥产品的优胜功能&#xff0c;然后到达一…

TCP连接建立与释放连接——>三次握手和四次挥手

1.三次握手的概述 我们在学网络的概念时&#xff0c;每当讲到TCP都会听到三次握手和四次挥手&#xff0c;一直以来可能都对这个概念模糊不清&#xff0c;那么什么是三次握手和四次挥手呢&#xff1f;简单的举一个例子&#xff0c;如果我们和朋友打游戏&#xff0c;我们要和朋友…

【class2】人工智能初步(自然语言处理)

要实现从评价中提取高频关键词&#xff0c;并判别其正负面性&#xff0c;其实是通过人工智能领域中的一个分支&#xff1a;自然语言处理。 在了解自然语言处理之前&#xff0c;我们先来说说&#xff0c;什么是自然语言&#xff08;Natural Language&#xff09;&#xff1f;自…

哔哩哔哩直播通用榜单系统

榜单系统的定位和业务价值 榜单遍布B站直播相关业务的各个角落&#xff0c;直播打赏、直播间互动、付费玩法、互动玩法、活动、主播PK、语聊房、人气主播排名、高价值用户排名、增值集卡、up主充电等等&#xff0c;在这众多的业务场景中&#xff0c;我们能看到各种各样的榜单。…

腐烂的橘子BFS

题目&#xff1a; 腐烂的橘子 在给定的 m x n 网格 grid 中&#xff0c;每个单元格可以有以下三个值之一&#xff1a; 值 0 代表空单元格&#xff1b; 值 1 代表新鲜橘子&#xff1b; 值 2 代表腐烂的橘子。 每分钟&#xff0c;腐烂的橘子 周围 4 个方向上相邻 的新鲜橘子…

使用VSCode撰写Latex文档

参考资料&#xff1a; 如何使用VSCode编写Latex&#xff1f; 概要 先安装texlive,然后安装VSCode. 我这里步骤是全的&#xff0c;但说的不那么细。 只介绍VSCode中的配置方法。 VSCode配置步骤 1. 安装LaTex Workshop插件 2. 配置Latex编译环境 将下列配置粘入settings.j…

TNNLS:Fast Self-Supervised Clustering With Anchor Graph论文阅读

1 Abstract 由于避免了使用通常在现实世界中不足的标记样本&#xff0c;无监督学习被视为在聚类任务中的快速和强大策略。然而&#xff0c;直接从原始数据集进行聚类会导致高计算成本&#xff0c;这限制了其在大规模和高维问题上的应用。最近&#xff0c;基于锚点的理论被提出…

基于uniapp+vue3+ts小程序项目实战之项目初始化

&#x1f680; 作者 &#xff1a;“二当家-小D” &#x1f680; 博主简介&#xff1a;⭐前荔枝FM架构师、阿里资深工程师||曾任职于阿里巴巴担任多个项目负责人&#xff0c;8年开发架构经验&#xff0c;精通java,擅长分布式高并发架构,自动化压力测试&#xff0c;微服务容器化k…

长难句打卡5.14

This is now a question for Gloria Mackenzie, an 84-year-old widow who recently emerged from her small, tin-roofed house in Florida to collect the biggest undivided lottery jackpot in history. 翻译&#xff1a;这是84岁的孤寡老人歌莉娅 麦肯齐当前所面临的问题…

Linux系统搭建Gitlab开源仓库管理系统并实现公网环境访问本地私有库

文章目录 前言1. 下载Gitlab2. 安装Gitlab3. 启动Gitlab4. 安装cpolar5. 创建隧道配置访问地址6. 固定GitLab访问地址6.1 保留二级子域名6.2 配置二级子域名 7. 测试访问二级子域名 前言 GitLab 是一个用于仓库管理系统的开源项目&#xff0c;使用Git作为代码管理工具&#xf…

geotrust ov泛域名证书2990

Geotrust是一家正规的CA证书颁发机构&#xff0c;致力于为个人以及企事业单位开发者提供安全可靠的数字证书产品&#xff0c;维护了个人博客网站、企业官网、商城网站以及银行等金融网站的数据安全&#xff0c;营造了一种健康的网络环境。今天就随SSL盾小编了解Geotrust旗下的O…

OSU micro-benchmarks安装测试指导

OSU micro-benchmarks安装测试指导 OSU micro-benchmarks工具介绍 OSU Micro benchmark工具是由Ohio State University提供的MPI&#xff08;Message Passing Interface&#xff0c;消息传递接口&#xff09;通信效率评测工具。该工具旨在通过执行不同模式的MPI操作&#xff…

linux fdisk 银河麒麟操作系统 v10 磁盘分区和挂载 详细教程

1查看 未加载的磁盘 fdisk -l 2 开始分区 fdisk /dev/vdb #查看分区 #新建分区和保存 3 格式化和挂载 fdisk -l mkfs.xfs /dev/vdb1 #查看uuid blkid /dev/vdb1 mkdir /data vi /etc/fstab UUID209daa-fb1c-48f2-bf5e-e63f38cb8a /data xfs defaults 0 0 #加载下 mo…

【bug记录】Vue3 Vant UI 中 van-popup 不弹出

原因&#xff1a;语法使用错误&#xff0c;使用了 Vue 2 的语法 Vue3语法&#xff1a; Vue2语法&#xff1a;

【JavaEE 初阶(六)】网络编程

❣博主主页: 33的博客❣ ▶️文章专栏分类:JavaEE◀️ &#x1f69a;我的代码仓库: 33的代码仓库&#x1f69a; &#x1faf5;&#x1faf5;&#x1faf5;关注我带你了解更多网络知识 目录 1.前言2.浅谈网络2.1基本知识2.2.OSI与TCP/IP 3.网络编程3.1TCP与UDP区别3.2UDP网路编程…

四川易点慧电商抖音小店:优势尽显,引领电商新潮流

在当下这个信息爆炸、消费模式日新月异的时代&#xff0c;电商行业正在经历一场前所未有的变革。四川易点慧电商抖音小店凭借其独特的优势&#xff0c;成功吸引了大量消费者的目光&#xff0c;成为电商领域的一股新势力。 四川易点慧电商抖音小店的最大优势在于其强大的品牌影…

Vue3实战笔记(19)—封装菜单组件

文章目录 前言一、封装左侧菜单导航组件二、使用步骤三、小彩蛋总结 前言 在Vue 3中封装一个左侧导航菜单组件是一项提升项目结构清晰度和代码可复用性的关键任务。这个过程不仅涉及组件的设计与实现&#xff0c;还需考虑其灵活性、易用性以及与Vue 3新特性的紧密结合。以下是…

如何恢复删除的文件?收好6个恢复策略!

“我经常在操作电脑时可能会有误删文件的情况发生&#xff0c;如果我不小心删除了重要的文件&#xff0c;应该使用什么方法来恢复它们呢&#xff1f;求解答&#xff01;” 在使用电脑时&#xff0c;我们可能一个手滑就误删了重要的文件。当文件删除后&#xff0c;如果没有掌握相…