【操作系统】Liunx项目自动化构建工具-make/Makefile

这篇具有很好参考价值的文章主要介绍了【操作系统】Liunx项目自动化构建工具-make/Makefile。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

       

  【操作系统】Liunx项目自动化构建工具-make/Makefile,Linux,自动化,运维,linux

  Yan-英杰的主页

悟已往之不谏 知来者之可追  

C++程序员,2024届电子信息研究生


目录

一、背景

二、Makefile

        实现

        Makefile依赖

        依赖关系

        makefile的工作原理

        项目清理

        补充:

        .PHONY是什么?

       Linux如何进行多行注释:

        说明:

三、Linux小程序(进度条)

四、使用git命令行

五、git三板斧

        下载项目到本地

        三板斧第一招: git add

        三板斧第二招: git commit

        三板斧第三招:git push


一、背景

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

二、Makefile

        实现

         C代码
        
#include <stdio.h>
int main()
{
     printf("hello Makefile!\n");
     return 0;
}
        Makefifile文件 hello:hello.o gcc hello.o -o hello hello.o:hello.s gcc -c hello.s -o hello.o hello.s:hello.i gcc -S hello.i -o hello.s hello.i:hello.c gcc -E hello.c -o hello.i

        Makefile依赖

        
.PHONY:clean
clean:
 rm -f hello.i hello.s hello.o hello

        依赖关系

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

        makefile的工作原理

                ① make命令会在当前目录下找到名字叫 “Makfile”或“makefile”的文件——>②首先
找到,第一个目标文件,在上面的例子中,他会先找到hello这个文件,并把这个文件作为最
终文件——> ③ 如果hello文件不存在,或者是hello所依赖的hello.o这个文件的修改时间要比
hello.o这个文件行,那么他就会执行后面所定义的命令来生成hello这个文件——> ④  如果
hello所依赖hello.o文件不存在,那么make会在当前文件中找目标为hello.o文件的依赖性,如
果找到则再根据那一个规则生成hello.o文件。(这有点像一个堆栈的过程)——> ⑤ 当然,
你的C文件和H文件是存在的啦,于是make会生成 hello.o 文件,然后再用 hello.o 文件声明
make的终极任务,也就是执行文件hello了。 ——> ⑥ 这就是整个make的依赖性,make会
一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件。 ——> ⑦ 在找寻的过
程中,如果出现错误,比如最后被依赖的文件找不到,那么make就会直接退出,并报错,而
对于所定义的命令的错误,或是编译不成功,make根本不理。 ——> ⑧  make只管文件的依
赖性,即,如果在我找了依赖关系之后,冒号后面的文件还是不在

        

        项目清理

        

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

        补充:

        .PHONY是什么?
         .PHONY是一个伪目标,
        可以防止在Makefile中定义的只执行命令的目标和工作目录下的实际文件出现名字冲突,另一种是提交执行makefile时的效率。
       Linux如何进行多行注释:

        1.ESC退出到命令模式

        2.ctrl+v 切换到可视化模式

        3.HJKL挪动光标位置

        4.shift+i输入//

        5.再按ESC即可,进行多行注释

        说明:
        
        (1)伪目标意思是这个目标本身不代表一个文件,执行这个目标不是为了得到某个文件或东西,而是单纯为了执行这个目标下面的命令。
        (2)伪目标一般都没有依赖,因为执行伪目标就是为了执行目标下面的命令。既然一定要执行命令了那就不必加依赖,因为不加依赖意思就是无条件执行。
        (3)伪目标可以直接写,不影响使用;但是有时候为了明确声明这个目标是伪目标会在伪目标的前面用.PHONY来明确声明它是伪目标
        例如:
        
        
.PHONY clean

clean:
        rm -rf *.o 

       使make命令会自动绕过隐含规则搜索过程,也就是说执行命令make clean会自动忽略名

为"clean"文件的存在,因此声明.PHONY配置项会改善性能,并且不需要担心实际同名文件存在

与否。

        

三、Linux小程序(进度条)

       依赖关系:Makefile

        

processbar: main.c processBar.c
    gcc -o $@ $^
.PHONY:clean
clean:
    rm -f processbar

        processBar.h

        

#pragma once
#include<stdio.h>
#include<string.h>
#include<unistd.h>
extern void processbar();

        

        processBar.c

        

#include "processBar.h"
  
 void processbar()
 {
     int i = 0;
     char bar[102];
     memset(bar, 0 ,sizeof(bar));
     const char *lable="|/-\\";
    
    while(i <= 100)
    {
      printf("[%-100s][%d%%][%c]\r", bar, i, lable[i%4]);
      fflush(stdout);
      bar[i++] = '#';
      usleep(10000);
    }
    
    printf("\n");
    
}   

四、使用git命令行

        背景:

        Git属于分散型版本管理系统,是为版本管理而设计的软件。

        Linux的创始人Linus Torvalds在2005年开发了Git的原型程序。当时,由于在Linux内核开发中使用的既有版本管理系统的开发方许可证发生了变更,为了更换新的版本管理系统,Torvalds开发了Git。

        Linux内核的更新速度在全世界也算首屈一指。因此,势必需要一个功能强、性能高的版本管理系统来提高开发速度。

        在当时的开源环境下,虽然已经有数款版本管理软件被开发出来,但功能和性能都差强人意。加之Git是由Linus Torvalds亲自着手开发的,可以说在功能与性能方面无可挑剔。程序员们愿意接受Git,很大程度上取决于这个背景。

        
        

五、git三板斧

        注:在做这些操作之前要先有个gitee或github的账号
        

        下载项目到本地

        创建好一个放置代码的目录.
        这里的 url 就是刚刚建立好的 项目 的链接 .

        三板斧第一招: git add

        

  git clone https://www.xxxx.com/xxxxxx
        将代码放到刚才下载好的目录中
      
        将需要用 git 管理的文件告知 git

        三板斧第二招: git commit

        提交改动到本地
        最后的 "." 表示当前目录
        提交的时候应该注明提交日志, 描述改动的详细内容 .
        报错:

        

        当遇到commit提交时,git命令无法识别,提交人的身份应该如何解决这种问题 

        

//修改默认邮箱和账户

git config --global user.email "xxx@qq.com"

git config --global user.name "Yan-英杰"

【操作系统】Liunx项目自动化构建工具-make/Makefile,Linux,自动化,运维,linux

        三板斧第三招:git push

                同步到远端服务器上 文章来源地址https://www.toymoban.com/news/detail-568164.html

git push
        同步到远端服务器上
        需要填入用户名密码. 同步成功后 , 刷新 Github 页面就能看到代码改动了

到了这里,关于【操作系统】Liunx项目自动化构建工具-make/Makefile的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【自动化项目实战】博客系统

    目录 1.博客自动化测试用例 2.准备工作  3.将手工测试用例转化为自动化测试用例 3.1 初始化动作 3.2 登录 3.3 博客列表博客数量 3.4 查看全文 3.5 写博客发表博客 3.6 删除 3.7 注销 4.总代码 🌈这节文章我们讲解一个实战项目——博客系统。首先我们需要 熟悉项目、针对核心流程

    2024年02月07日
    浏览(48)
  • 自动化项目实战 [个人博客系统]

    效验第一篇博客 不是 “自动化测试” 退出到登录页面,用户名密码为空

    2024年02月08日
    浏览(42)
  • 博客系统自动化测试项目实战(测试系列9)

    目录 前言: 1.博客前端页面测试用例图 2.测试用例的代码实现 2.1登录页面的测试 2.2博客列表页面的测试 2.3写博客测试 2.4博客详情页面的测试 2.5已发布博客的标题和时间的测试 2.6注销用户的测试 结束语: 之前小编给大家讲解了有关于Selenium和Junit5自动化测试的一些基础知

    2024年02月10日
    浏览(29)
  • 项目实战-RuoYi后台管理系统-登录功能Postman接口自动化脚本分享

        先来回顾一下之前写过的关于RuoYi后台管理系统项目实战相关的几篇文章: 测试项目实战----RuoYi后台管理系统 项目实战-RuoYi后台管理系统-用户管理测试点设计 项目实战-RuoYi后台管理系统-登录相关接口分析 Docker搭建webdis用于提供api查询redis中的数据 项目实战-RuoYi后台管

    2023年04月20日
    浏览(34)
  • 【项目案例】前后端分离项目 【中小企业办公自动化管理系统 】SpringBoot + Vue + Element UI + Mysql

    👉 博主介绍 : 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主 Java知识图谱点击链接: 体系化学习Java(Java面试专题) 💕💕 感兴趣的同学可以收藏关注下 , 不然下次找不到哟

    2024年02月14日
    浏览(38)
  • 移动端App自动化之触屏操作自动化

    工作中我们经常需要对应用的页面进行手势操作,比如滑动、长按、拖动等,AppiumDriver 为我们提供一个模拟手势操作的辅助类 TouchAction,可以通过它对手机屏幕进行手势操作。 具体用法参见链接:chromedriver下载地址与webview自动化关键代码 1 导入TouchAction 常用的手势操作 To

    2024年02月19日
    浏览(38)
  • python 自动化学习(四) pyppeteer 浏览器操作自动化

    背景 之前我在工作中涉及到了很多地方都是重复性的页面点点点工作,又因为安全保密原则不开放接口和数据库,只有一个页面来提供点击进行操作,就想着用前面学的自动化来实现,但发现前面学的模拟操作对浏览器来说并没有那么友好,而后改用“selenium”,但是存在一

    2024年02月12日
    浏览(29)
  • 干货|移动端App自动化之触屏操作自动化

    工作中我们经常需要对应用的页面进行手势操作,比如滑动、长按、拖动等,AppiumDriver 为我们提供一个模拟手势操作的辅助类 TouchAction,可以通过它对手机屏幕进行手势操作。 具体用法参见链接:chromedriver下载地址与webview自动化关键代码 2 导入TouchAction 常用的手势操作 To

    2024年02月01日
    浏览(43)
  • 自动化操作脚本

    SSH连接并执行指令操作 MQTT服务器启动

    2024年02月05日
    浏览(34)
  • Python操作自动化

    迷途小书童 读完需要 3 分钟 速读仅需 1 分钟 当我们需要自动化进行一些重复性的任务时,Python 中的 pyautogui 库就可以派上用场了,这个库可以模拟鼠标和键盘的操作,让我们的程序可以像人一样与计算机进行交互。 首先,我们需要安装 pyautogui 库。在命令行中输入以下命令

    2024年02月07日
    浏览(33)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包