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

       

  5a2585dded9b416fb4ea58637b42ed39.png

  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 cleanclean:rm -rf *.o 

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

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

与否。

三、Linux小程序(进度条)

       依赖关系:Makefile

        

processbar: main.c processBar.cgcc -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-英杰"

        三板斧第三招:git push

                同步到远端服务器上

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

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

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

相关文章

微服务部署架起App运维的高速通道

今天来说下微服务&#xff0c;我们知道微服务在 App 开发中具备模块化开发、独立部署扩展、问题隔离等特点&#xff0c;这种微服务架构模式能够使应用程序更具弹性、可扩展和可维护&#xff0c;能够更好地应对快速变化的需求和规模的增长。 准备通过系统的梳理说一说微服务部署…

mongodb集群搭建

下载地址&#xff1a; https://www.mongodb.com/try/download/community下载mongodb-linux-x86_64-rhel70-5.0.18 搭建集群 tar -zxvf mongodb-linux-x86_64-rhel70-5.0.18.tgz mkdir -p data/dp cd mongodb-linux-x86_64-rhel70-5.0.18 mkdir -p data/db mkdir log mkdir c…

【C++】-list的具体使用

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法&#x1f384; 如 果 你 …

4. 设计(黑盒)测试用例 (一) 等价类 边界值 判定表

本篇文章我们将详细介绍如何来测试用例。 1. 设计测试用例的基本要素 1.1 测试用例概念 测试用例&#xff08;Test Case&#xff09;是为了实施测试而向被测试的系统提供的一组集合。 1.2 测试用例要素 测试环境、测试步骤、测试数据、预期结果。 1.3 测试用例的重要性 提…

未来Mac下载站怎么打不开了

重要公告&#xff1a; 未来软件园因业务需要现更换域名 原域名&#xff1a;Mac.orsoon.com 更为新域名&#xff1a;未来mac下载-Mac软件-mac软件下载-mac软件大全 程序已全面转移&#xff0c;请访问新域名

Pycharm远程服务器上运行程序报错:Can‘t get remote credentials for deployment server

一、问题描述&#xff1a; 二、解决方法&#xff1a; 1.依次选择 文件 -> 设置 -> 项目 -> Python 解释器,出现如下界面&#xff1a; 2. 点击python 解释器右侧的小齿轮&#xff0c;选择全部显示&#xff1a; 3. 在弹出的窗口中发现存在多个连接到同一个服务器的解释…

Linux:企业级服务器嵌入式系统优势与应用

Linux在企业级服务器领域具有广泛应用。作为一种强大的操作系统&#xff0c;Linux可以用于构建企业的WWW服务器、数据库服务器、负载均衡服务器、邮件服务器、DNS服务器、代理服务器、路由器等。通过采用Linux系统&#xff0c;企业不仅可以降低运营成本&#xff0c;还能获得高稳…

react项目打包部署到服务器上+宝塔面板的操作

首先进行配置react项目&#xff0c;在webpack.json中 加上homepage:.或‘./’ 首先需要项目打包 npm run build 我们会得到一个build 运行build中的index文件如果是空白的话我们需要更改上面的操作重新打包 .或./ 打包完我们需要进入腾讯云或阿里云的安全组中进行配置端口 …

【极简 亲测】已拦截跨源请求:同源策略禁止读取位于....的远程资源。(原因:CORS 头缺少 ‘Access-Control-Allow-Origin‘)

CORS是Cross-Origin Resource Sharing。 解决 首先这个是浏览器层面的拦截。下面的方法都是解除浏览器拦截的方式。 解除了之后还是有可能其他方面有问题的&#xff0c;但是那个会提示其他错误。 比如CORs Failed之类的&#xff0c;这个是没收到response&#xff0c;大概率是…

instsrv 注册 windows 系统服务

注册步骤 Win r 打开 cmd 窗口执行 instsrv.exe myserver C:\Windows\System32\srvany.exe 示例&#xff1a; instsrv.exe nginx C:\Windows\System32\srvany.exe win r 运行 regedit 进入注册表&#xff0c;依次找到以下路径 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\S…

java实现身份证号码校验

二代身份证为18位&#xff0c;前六位为籍贯信息&#xff0c;7至14位为生日&#xff0c;最后一位校验前17位号码是否正确 校验规则为&#xff1a;前17位每一位乘以一个固定权重并相加然后除以11得到的余数&#xff0c;判断余数是否和校验的数相等 代码实现&#xff08;支持15位…

SpringCloud学习路线(1)—— 从头开始的微服务

一、服务架构的历史 现有的服务框架&#xff1a; 单体架构 概念&#xff1a; 将业务所有功能集中在一个项目中开发&#xff0c;打包部署优点&#xff1a; 架构简单&#xff0c;部署成本低缺陷&#xff1a; 耦合度高 分布式架构 概念&#xff1a; 根据业务功能对系统进行拆分&a…