Linux环境基础开发工具使用(二)

这篇具有很好参考价值的文章主要介绍了Linux环境基础开发工具使用(二)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Linux环境基础开发工具使用(二),Linux操作系统,linux,运维,服务器

📘北尘_:个人主页

🌎个人专栏:《Linux操作系统》《经典算法试题 》《C++》 《数据结构与算法》

☀️走在路上,不忘来时的初心

一、Linux项目自动化构建工具-make/Makefile

1、背景

  1. 会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。
  2. 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新译,甚至于进行更复杂的功能操作。
  3. makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。
  4. make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。makefile都成为了一种在工程方面的编译方法。
  5. make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。

2、实例代码

我们首先创建一个text.c文件

Linux环境基础开发工具使用(二),Linux操作系统,linux,运维,服务器

然后vim打开text.c文件进行编辑,编辑完后退出

Linux环境基础开发工具使用(二),Linux操作系统,linux,运维,服务器

创建一个makefile文件,并vim打开进行编写

Linux环境基础开发工具使用(二),Linux操作系统,linux,运维,服务器

并使用make指令进行操作

Linux环境基础开发工具使用(二),Linux操作系统,linux,运维,服务器


3、依赖关系

上面的文件 text ,它依赖 text.o
text.o , 它依赖 text.s
text.s , 它依赖 text.i
text.i, 它依赖 text.c


4、依赖方法

gcc text.* -option text.* ,就是与之对应的依赖关系


5、原理

make是如何工作的,在默认的方式下,也就是我们只输入make命令。那么,

  1. make会在当前目录下找名字叫“Makefile”或“makefile”的文件。
  2. 如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到“text”这个文件,并把这个文件作为最终的目标文件。
  3. 如果text文件不存在,或是text所依赖的后面的text.o文件的文件修改时间要比text这个文件新(可以用 touch 测试),那么,他就会执行后面所定义的命令来生成hello这个文件。
  4. 如果text所依赖的text.o文件不存在,那么make会在当前文件中找目标为text.o文件的依赖性,如果找到则再根据那一个规则生成text.o文件。(这有点像一个堆栈的过程)
  5. 当然,你的C文件和H文件是存在的啦,于是make会生成 text.o 文件,然后再用 text.o 文件声明make的终极任务,也就是执行文件text了。
  6. 这就是整个make的依赖性,make会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件。
  7. 在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make就会直接退出,并报错,而对于所定义的命令的错误,或是编译不成功,make根本不理。
  8. make只管文件的依赖性,即,如果在我找了依赖关系之后,冒号后面的文件还是不在,那么对不起我就不工作啦。

6、项目清理

  1. 工程是需要被清理的
  2. 像clean这种,没有被第一个目标文件直接或间接关联,那么它后面所定义的命令将不会被自动执行,不过,我们可以显示要make执行。即命令——“make clean”,以此来清除所有的目标文件,以便重编译。
  3. 但是一般我们这种clean的目标文件,我们将它设置为伪目标,用 .PHONY 修饰,伪目标的特性是,总是被执行的。
  4. 可以将我们的 hello 目标文件声明成伪目标,测试一下。

二、Linux第一个小程序-进度条

1、\r&&\n

‘\r’是回车,前者使光标到行首,(carriage return)’\n’是换行,后者使光标下移一格。

老式enter键

Linux环境基础开发工具使用(二),Linux操作系统,linux,运维,服务器


2、行缓冲区概念

1、什么现象?

#include <stdio.h>
int main()
{
 printf("hello Makefile!\n");
 sleep(3);
 return 0;
 }

Linux环境基础开发工具使用(二),Linux操作系统,linux,运维,服务器
Linux环境基础开发工具使用(二),Linux操作系统,linux,运维,服务器

2、什么现象?

#include <stdio.h>
int main()
{
 printf("hello Makefile!");
 sleep(3);
 return 0;
}
 

Linux环境基础开发工具使用(二),Linux操作系统,linux,运维,服务器
Linux环境基础开发工具使用(二),Linux操作系统,linux,运维,服务器

3、什么现象?

#include <stdio.h>
int main()
{
 printf("hello Makefile!");
 fflush(stdout);
 sleep(3);
 return 0;
}

Linux环境基础开发工具使用(二),Linux操作系统,linux,运维,服务器
Linux环境基础开发工具使用(二),Linux操作系统,linux,运维,服务器


3、进度条代码

1、版本一

#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<stdlib.h>
const char* lable="|/-\\";
int main()
{
   char buffer[NUM];
   memset(buffer, '\0', sizeof(buffer));
   int cnt = 0;
   int n = strlen(lable);
   buffer[0] = Head;
   while(cnt <= 100)
   {
       printf("[%-100s][%3d%%][%c]\r", buffer, cnt, lable[cnt%n]);
       fflush(stdout);
       buffer[cnt++] = '=';
       if(cnt < 100) buffer[cnt] = '>';
       usleep(50000);
   }

   printf("\n");
}

Linux环境基础开发工具使用(二),Linux操作系统,linux,运维,服务器
Linux环境基础开发工具使用(二),Linux操作系统,linux,运维,服务器

2、版本二 ,跟下载速度牵连

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
typedef void (*callback_t)(double);
define max 103
define size 1024*1024*1024
const char* lable="|/-\\";
char buffer[max]={0};
void process_flush(double rate)
   {
      static int cnt = 0;
      int n = strlen(lable);
      if(rate <= 1.0) buffer[0] = '>';
      printf("[%-100s][%.1f%%][%c]\r", buffer, rate, lable[cnt%n]);
      fflush(stdout);
  
      buffer[(int)rate] = '=';
      if((int)rate+1 < 100) buffer[(int)(rate+1)] = '>';                                                                
      if(rate>=100.0) printf("\n");
  
      cnt++;
      cnt%=n;
  }
void download()
  {
      srand(time(NULL)^1023);
      int total=size;
      while(total)
       {
          int one=rand()%(1024*1024);
          total-=one;
          if(total<=0) total=0;
          int download=size-total;
           double rate = (download*1.0/(size))*100.0;
          process_flush(rate);
  
      }
  }
  int main()
  {
      download();
  }


Linux环境基础开发工具使用(二),Linux操作系统,linux,运维,服务器文章来源地址https://www.toymoban.com/news/detail-744422.html


到了这里,关于Linux环境基础开发工具使用(二)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux】Linux环境基础开发工具的使用 ———(yum、vim、gcc&g++、gdb、make/Makefile、进度条 、git)

    (꒪ꇴ꒪(꒪ꇴ꒪ )🐣,我是 Scort 🎓 🌍博客主页:张小姐的猫~江湖背景🌍 快上车🚘,握好方向盘跟我有一起打天下嘞! 送给自己的一句鸡汤🤔: 🔥集中起来的意志可以击穿顽石🔥 🙏作者水平很有限,如果发现错误,可在评论区指正,感谢🙏 🎉🎉欢迎持续关注!🎉🎉

    2024年01月16日
    浏览(40)
  • 【Linux环境基础开发工具】编辑器-vim

    vim是一个编辑器,是在Linux下编程的常用工具,如果要学习在Linux下的编程, 那学会使用vim是一个必修课,今天我就来讲解如何使用vim编辑器。 目录 写在前面 什么是vim vim的常用命令 (1)gg:定位光标到第一行第一个位置 (2)shift + g:定位光标到最后一行 (3)n + shift + g:

    2024年02月07日
    浏览(39)
  • 【Linux环境基础开发工具】软件包管理器-yum

    今天我打算介绍如何在Linux环境下载软件, Linux作为一个操作系统,就像windows一样,当然是存在软件的。 目录 写在前面 怎么在Linux环境安装软件 源代码安装 rpm安装包安装 yum安装 如何理解Linux的生态 如何使用yum安装软件 如何更换yum源 总结: 写在最后: 一般来说,Linux下有

    2024年02月08日
    浏览(50)
  • 【Linux环境基础开发工具】编译器-gcc/g++

    上一篇博客, 我们学习了vim编辑工具,学会了怎么写代码, 这篇文章,我将分享代码该怎么编译的问题。 目录 写在前面: 1. gcc和g++介绍 2. gcc是如何编译程序的 1. 预处理 2. 编译 3. 汇编 4. 链接 3. gcc的选项介绍 4. 我们使用的函数是哪来的 5. 我们的.o文件和库是如何链接的?

    2024年02月10日
    浏览(35)
  • Linux基础开发工具之Linux自动项目构建工具的使用

    目录 前言 1.make/makefile 1.1 依赖关系/依赖方法 2.原理 3.项目清理  4.make的执行问题  5.相关简单的符号介绍 总结   之前给大家介绍了我们在开发过程中所需要使用到的编辑器vim,以及编译器gcc/g++的使用,但是我相信大家在使用过程会发现我们在每次编写好一份代码时总是需

    2024年02月13日
    浏览(28)
  • linux中基础开发工具的使用

    1.linux中的软件包管理器 1.1什么是软件包 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序.但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通过包管理器可以很

    2024年02月02日
    浏览(51)
  • 【Linux】基础开发工具使用 --- gcc

    目录 预处理 编译 汇编 链接 函数库 协助记忆 🧋GCC(GNU Compiler Collection)是由GNU开发的编程语言编译器。GNU编译器套件包括C、C++、 Objective-C、 Fortran、Java、Ada和Go语言前端,也包括了这些语言的库(如libstdc++,libgcj等。),说那么多就是一个编译器。平时写完的程序就是需

    2024年02月03日
    浏览(31)
  • 【Linux操作系统】探秘Linux奥秘:Linux开发工具的解密与实战

    🌈个人主页: Sarapines Programmer 🔥 系列专栏: 《操作系统实验室》 🔖诗赋清音:柳垂轻絮拂人衣,心随风舞梦飞。 山川湖海皆可涉,勇者征途逐星辉。 目录 🪐1 初识Linux OS 🪐2 Linux开发工具的解密与实战 🌍1. 实验目的 🌍2. 实验准备 🌍3. 实验内容 🌍4. 实验心得 📝总

    2024年02月03日
    浏览(45)
  • 【Linux基础开发工具】yum生态&&vim的配置与使用

    目录 前言  1. Linux 软件包管理器 yum   1.1 什么是yum  1.2 快速上手yum  1.3 yum生态 2. Linux编辑器vim 2.1 vim的模式 2.2 vim使用技巧 3. vim编辑器辅助功能配置 3.1 配置  3.2 用户sudo权限配置  总结         Linux基础指令与权限之后,Linux系统开发工具的使用也至关重要,今天我将分享

    2024年02月04日
    浏览(28)
  • Linux之基础开发工具gdb调试器的使用(三)

    📘北尘_ :个人主页 🌎个人专栏 :《Linux操作系统》《经典算法试题 》《C++》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 yum install -y gdb 程序的发布方式有两种,debug模式和release模式 Linux gcc/g++出来的二进制程序,默认是release模式,release模式下无法调试 要使用gd

    2024年02月05日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包