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 这是什么呢这是回车符,回车和换行可不是一个东西,他们是有区别的,那么一张图就能表现出来他们的区别
在这里插入图片描述

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

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

相关文章

vue2人力资源项目8员工详情

页面结构 <template><div class"dashboard-container"><div class"app-container"><div class"edit-form"><el-form ref"userForm" label-width"220px"><!-- 姓名 部门 --><el-row…

C#之如何判断数据类型

一、GetType方法 a.GetType()&#xff1a;获取当前变量的类型对象 string str "Hello World";Console.WriteLine(str.GetType()); 结果: 二、typeof方法 typeof(Int)&#xff1a;获取的是Int类型的类型对象 int num 10;Console.WriteLine(num.GetType() typeof(i…

常见磁盘分区问题

给磁盘分区有几个主要的原因&#xff1a; 组织和管理数据&#xff1a;分区可以帮助用户更好地组织和管理数据。例如&#xff0c;你可以在一个分区上安装操作系统&#xff0c;而在另一个分区上存储个人文件。这样&#xff0c;即使操作系统崩溃或需要重新安装&#xff0c;你的个…

【cmake】Windows 环境下编译第三方依赖源码(以编译Xerces库为例)

第三方依赖源码的编译分为两种&#xff0c;一种是使用 Configure 脚本编译&#xff0c;另一种是使用 CMakeLists.txt 编译。Xerces 3.2.3 的编译方式是 CMakeLists.txt 脚本编译。 必要软件&#xff1a; CMake &#xff08;CMake | Download&#xff09;Visual Studio 2019&a…

java版数据结构:堆,大根堆,小根堆

目录 堆的基本概念&#xff1a; 如何将一个二叉树调整成一个大根堆&#xff1a; 转成大根堆的时间复杂度 根堆中的插入&#xff0c;取出数据&#xff1a; 堆的基本概念&#xff1a; 堆是一种特殊的树形数据结构&#xff0c;它满足以下两个性质&#xff1a; 堆是一个完全二叉…

Mirror从入门到入神

Mirror从入门到成神 文章目录 Mirror从入门到成神简介NetworkClientRegisterPrefabConnect (string address)Disconnect ()activeactiveHost NetworkServerSpawn 简介 Mirror是一个unity网络同步框架&#xff0c;基于MonoBehaviour生命周期的回调的基础上进行数值的同步&#…

刷题之找到字符串所有字母异位词

找到字符串所有字母异位词 滑动窗口。滑动窗口大小为待比较数组的大小。 class Solution { public:vector<int> findAnagrams(string s, string p) {//滑动窗口vector<int>result;if(s.size()<p.size())return result;vector<int>pnum(26,0);//记录p的字…

[第五空间 2021]WebFTP

目录扫描git泄露phpinfo.php 一开始想到是sql注入&#xff0c;但是不行。目录扫描&#xff0c;发现 .git 和 phpinfo.php 访问phpinfo.php&#xff0c;ctrlf 搜索 flag&#xff0c;找到 flag。

【风变】Python爬虫精进复习-20240430

参考笔记 下面给出一个巨佬学习风变pyhton基础语法和爬虫精进的笔记&#xff08;链接&#xff09; 风变编程笔记(一)-Python基础语法 风变编程笔记(二)-Python爬虫精进 技术总结 request BeautifulSoup selenium BeautifulSoup 练习0-1&#xff1a;文章下载 import requ…

TypeScript学习日志-第二十六天(weakMap,weakSet,set,map)

weakMap,weakSet,set,map 一、set set 的基本用法如下&#xff1a; 二、map map 与 set 的 区别 就是 map 的 key 可以是引用类型 object array , map 的添加时使用 set 三、weakmap weakset weakmap和weakset 都是弱项 弱引用 其键必须是引用类型&#xff0c;不能是其它类…

【C/C++笔试练习】DNS劫持、三次握手、TCP协议、HTTPS、四次挥手、HTTP报文、拥塞窗口、POP3协议、UDP协议、收件人列表、养兔子

文章目录 C/C笔试练习选择部分&#xff08;1&#xff09;DNS劫持&#xff08;2&#xff09;三次握手&#xff08;3&#xff09;TCP协议&#xff08;4&#xff09;HTTPS&#xff08;5&#xff09;四次挥手&#xff08;6&#xff09;HTTP报文&#xff08;7&#xff09;拥塞窗口&a…

网优干货:ACP交付详解版(3)

1. 全局指标分析 点击GIS页面左侧的 按钮&#xff0c;展开指标树&#xff0c;可查看各项优化目标的当前值、预测值和差值。 拖动指标树中的某个指标到GIS页面&#xff0c;可呈现该指标的整体分布。GIS页面共有两个半屏&#xff0c;用户可以做优化前后相同指标的对比&#xff0c…

从CSDN搬家到微信公众号

博主将会在微信公众号里不断输出精品内容&#xff0c;陪伴大家共同成长。 如果你对博主的经历感兴趣&#xff0c;或者对博主的IT技术感兴趣&#xff0c;欢迎关注我的微信公众号&#xff0c;阅读我的技术文章&#xff0c;免费获取各种IT资源。也可以加我的微信成为我的好友&…

【Javaer学习Python】 1、Django安装

安装 Python 和 PyCharm 的方法就略过了&#xff0c;附一个有效激活PyCharm的链接&#xff1a;https://www.quanxiaoha.com/pycharm-pojie/pycharm-pojie-20241.html 1、安装Django # 安装Django pip install Django# 查看当前版本 python -m django --version 5.0.62、创建项…

ollama离线部署llama3(window系统)

首先介绍下ollama是什么&#xff1f;Ollama是一个开源的大型语言模型服务工具&#xff0c;旨在为用户提供本地化的运行环境&#xff0c;满足个性化的需求。具体来说&#xff0c;Ollama是一个功能强大的开源框架&#xff0c;可以简化在Docker容器中部署和管理大型语言模型&a…

24深圳杯C题18页高质量论文+可执行代码+图表

比赛题目的完整版思路可执行代码数据参考论文都会在第一时间更新上传的&#xff0c;大家可以参考我往期的资料&#xff0c;所有的资料数据以及到最后更新的参考论文都是一次付费后续免费的。注意&#xff1a;&#xff08;建议先下单占坑&#xff0c;因为随着后续我们更新资料数…

2024年5月中,AITOP100平台活动专区迎来六场AI大赛盛事!

AITOP100平台的活动专区在2024年5月中旬更新的6场AI大赛来了&#xff01; 随着人工智能技术的飞速发展&#xff0c;AI设计已经成为了创新与创意的新领域。2024年5月中旬&#xff0c;由腾讯研究院、剪映、站酷等互联网大厂主办的6场AI设计大赛震撼来袭&#xff0c;为广大AI设计…

文本到语音的学习笔记:从Docker开始

1.docker 是什么意思&#xff1f; Docker 是一种开源的容器化平台&#xff0c;它允许开发者将应用及其依赖打包到一个轻量级、可移植的容器中&#xff0c;然后可以在任何支持Docker的系统上运行这个应用&#xff0c;而不必担心环境差异导致的问题。 以下是Docker的一些关键特…

【接口测试_03课_-接口自动化思维梳理及Requests库应用】

一、通过代码&#xff0c;实现Jmeter 1、项目要放在虚拟环境里面&#xff0c;解释器要使用虚拟环境的 上面是虚拟环境&#xff0c;下面是系统环境。2选一 venv目录 查看当前虚拟环境已存在的依赖包 2、安装Requests依赖包 1&#xff09;安装命令 pip install requests 如果…

Windows Server 2022 环境下WEB和DNS服务器配置方法

目录 实验名称&#xff1a;WEB和DNS服务器配置实验目的实验原理&#xff1a;主要设备、器材&#xff1a;实验内容&#xff1a;配置本地WEB站点配置本地DNS服务器 实验名称&#xff1a;WEB和DNS服务器配置 实验目的 掌握 Windows Server 2022 环境下WEB服务器配置方法 掌握 Wi…