Linux - make与makefile

news2025/1/19 23:10:41

文章目录

  • 什么是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.coloradmin.cn/o/1674210.html

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

相关文章

内存卡惊现0字节!数据丢失怎么办?

在日常使用电子设备的过程中&#xff0c;有时我们会遇到一个令人困惑的问题——内存卡突然变成了0字节。这意味着原本存储在内存卡中的数据似乎在一夜之间消失得无影无踪&#xff0c;给用户带来极大的困扰。本文将详细解析内存卡0字节现象&#xff0c;探究其原因&#xff0c;并…

prompt工程策略(一:使用 CO-STAR 框架来搭建 prompt 的结构)

原文&#xff1a;我是如何赢得GPT-4提示工程大赛冠军的 为了让 LLM 给出最优响应&#xff0c;为 prompt 设置有效的结构至关重要。CO-STAR 框架是一种可以方便用于设计 prompt 结构的模板。该模板考虑了会影响 LLM 响应的有效性和相关性的方方面面&#xff0c;从而有助于得到更…

波卡 2024 一季度报告:XCM 创下历史新高,JAM 链将引领 Polkadot 2.0 新风向

作者&#xff1a;Nicholas Garcia&#xff5c;Messari 研究分析师 编译&#xff1a;OneBlock 原文&#xff1a;https://messari.io/report/state-of-polkadot-q1-2024 近期&#xff0c;Messari Crypto 发布了 Polkadot 2024 年 Q1 状况的数据报告。OneBlock 为你梳理了本篇报…

[自动化]pyautogui的使用

目录 环境 包的版本 前置知识 鼠标控制函数 屏幕与鼠标位置 size() position() OnScreen() 鼠标移动 moveTo() move() 鼠标拖动 dragTo() drag() mouseDown()按下鼠标 mouseUp()松开鼠标 鼠标滚动 scroll() 键盘控制函数 write() press() keyDown()和keyU…

用友系统-U9企业版存在任意文件上传漏洞(新接口)-漏洞挖掘

0x01 产品简介 用友系统-U9 cloud是基于最新应用平台&#xff0c;全新系统架构及开发技术&#xff0c;适配安可要求&#xff0c;融合生态发展&#xff0c;开放标准数据服务接口&#xff0c;并与用友系统-U9 cloud系列产品无缝融合应用&#xff0c;打造场景化、数据化工作驱动的…

简单易懂的 Postman 在线测试方法

在现代软件开发的生命周期中&#xff0c;API 测试扮演着一个不可或缺的角色。Postman 是一个普遍被使用的工具&#xff0c;它可以帮助开发者快速有效地进行接口测试。以下内容是关于如何使用 Postman 的详细指南。 下载并安装 Postman 最初的步骤是安装 Postman 到你的电脑。…

TongWeb8 脚本录制功能

应用场景 在TongWeb8的命令行使用过程中&#xff0c;为简化从手册查找命令行参数的过程&#xff0c;增加了脚本录功能。录制您在控制台上所进行的操作过程&#xff0c;并可在一个新的环境回放这些操作&#xff0c;以提高业务系统的部署效率。录制的脚本文件类型包括 commandsto…

C++复习 -- 引用

引用概念: 引用变量是一个别名&#xff0c;也就是说&#xff0c;它是某个已存在变量的另一个名字。 一旦把引用初始化为某个变量&#xff0c;就可以使用该引用名称或变量名称来指向变量。 思维发散: 在C语言中&#xff0c;一个数据对应一个内存&#xff0c;通过由一个变量名来访…

Go vs Rust:哪种编程语言更好,为什么?

在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「C的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01; Go 和 Rust 都是现代编程语言&…

the7主题下载,探索WordPress主题的无限可能

在数字时代&#xff0c;一个出色的网站是任何企业或个人品牌的必备。但在这个竞争激烈的网络世界中&#xff0c;如何让您的网站脱颖而出&#xff1f;答案就是 the7 —— 一款专为创造独特和视觉冲击力强的网站而设计的 WordPress 主题。 1. 无限设计可能性 the7 以其独特的设…

美国站群服务器如何提高企业网站的负载均衡能力?

美国站群服务器如何提高企业网站的负载均衡能力? 美国站群服务器是企业提高网站负载均衡能力的重要工具之一。随着网络流量的增加和用户需求的多样化&#xff0c;如何有效地管理和分配流量成为了企业面临的挑战。通过采用美国站群服务器&#xff0c;企业可以实现流量的智能分…

均线金叉死叉及应用案例

5日均线和10日均线交叉 5日均线和10日均线交叉指的是5日和10日均线的相互交汇,根据5日均线运行方向的不同可以分为两种交叉。一是5日均线向上运行并交叉10日均线,二是5日均线向下运行并交叉10日均线,前面的交叉被称为金叉,后面的交叉被称为死叉。 技能解析: 5日均线和10日均…

企企通:电子半导体行业数字化转型:智慧供应链与协同效率的融合之道

半导体行业是现代科技的基石&#xff0c;它在电子、通信、计算机、汽车、医疗等多个关键领域发挥着至关重要的作用。从智能手机到汽车&#xff0c;从医疗设备到工业自动化&#xff0c;半导体技术的应用无处不在&#xff0c;它不仅推动了技术的创新&#xff0c;还促进了经济的增…

如何快速在线做视频二维码?在线视频生码的3步操作技巧

现在很多人会选择生成二维码的方式来查看视频内容&#xff0c;将视频生成二维码后分享给其他人在手机扫码查看&#xff0c;有利于提升视频内容传播的速度&#xff0c;提高用户获取视频的便捷性。视频二维码有很多的用途可以使用&#xff0c;比如使用教程、个人展示、产品介绍、…

【会议征稿】第四届机器学习与智能系统工程国际学术会议(MLISE 2024, 6/28-30)

第四届机器学习与智能系统工程国际学术会议&#xff08;MLISE 2024)由珠海科技学院主办&#xff0c;并获得多家高校与研究机构共同支持&#xff0c;将于204年6月28-30日在珠海召开。 MLISE将围绕 “机器学习与智能系统工程” 相关领域&#xff0c;为国内外研究人员与学者提供一…

QT的创建,发现编译器有一个黄色三角形感叹号,提示说Cmake配置错误,该怎么办?

确保你安装了Cmake 2.如果你电脑之前已经装了Cmake&#xff0c;那么在qt安装中&#xff0c;即便你选择了Cmake版本&#xff0c;但依旧不会修改电脑的Cmake版本。这时候就会出现黄色箭头。在勾勾的地方会有一个黄色感叹符号&#xff08;我已经解决了&#xff0c;所以没有显示&a…

如何做好图纸加密

在工业设计领域&#xff0c;图纸无疑是企业最宝贵的资产之一&#xff0c;其中包含了大量的创新思想、独特设计和商业秘密。然而&#xff0c;随着信息技术的发展和应用的普及&#xff0c;图纸防泄密工作面临着前所未有的挑战。因此&#xff0c;如何有效地防止图纸泄密&#xff0…

【Linux】Socket网络套接字

文章目录 网络套接字1. 网络编程概念1.1 IP地址和端口号1.2 理解网络字节序1.3 sockaddr结构体 2. 网络编程接口2.1 通用接口socket()bind() 2.2 UDP接口recvfrom()sendto() 2.3 TCP接口listen()accept()connect()recv()/send() 2.4 IP格式转换接口2.5 套接字接口封装 3. 网络通…

EasyNmon服务器性能监控工具环境搭建

一、安装jdk环境 1、看我这篇博客 https://blog.csdn.net/weixin_54542209/article/details/138704468 二、下载最新easyNmon包 1、下载地址 https://github.com/mzky/easyNmon/releases wget https://github.com/mzky/easyNmon/releases/download/v1.9/easyNmon_AMD64.tar.…

ansible利用playbook 部署lamp架构

搭建参考&#xff1a;ansible批量运维管理-CSDN博客 定义ansible主机清单 [rootansible-server ~]# vim /etc/hosts 192.168.200.129 host01 192.168.200.130 host02 [rootansible-server ~]# vim /etc/ansible/hosts [webserver] host01 host02 在ansible端编写index.html…