当前位置: 首页 > article >正文

【Linux取经之路】Linux项目自动化构建工具-make/makefile git三板斧

目录

关于make和makefile

一个案例

make和makefile的使用 

makefile的基本语法

git的使用


关于make和makefile

make是 Linux 系统中广泛使用的一个自动化构建工具,它根据用户定义的规则(通常保存在一个名为 makefile的文件中)来自动编译和链接程序。make 工具的主要目的是自动化编译过程,减少重复的手动操作,并确保编译过程的一致性和可重复性。make是一个解释makefile中命令的工具。一条命令(make)和一个文件(makefile),搭配使用,完成项目自动化构建。

一个案例

假设我们要执行的文件(main)里包含了3个源代码文件,分别是hello.c、world.c、test.c。为了得到可执行文件main,我们做如下的操作。

hello.c:声明Add函数。

world.c:实现Add函数。

test.c:调用Add函数。

1)得到hello.o、world.o、test.o

2)将hello.o、world.o、test.o编译成main

gcc -c hello.c -o hello.o
gcc -c world.c -o world.o
gcc -c test.c -o test.o
gcc -o main hello.o world.o test.o

编译的过程需要进行好多操作,而且如果需要重新编译呢?上述的流程在整一遍?未免太烦人了吧,如果可以的话,能不能一步就完成上面的所有操作?下面我们正式进入make和makefile。 

make和makefile的使用 

我们先在当前目录下新建一个makefile文件,文件内容如下:

第二行开头是Table键产生的空格。第一行叫做依赖关系,第二行叫做依赖方法。下面我们来使用makefile指定的规则进行编译操作。

我们在使用make的时候,它会去读取makefile的内容,并根据内容直接去给它编译相关的文件。

如果我们连续make,会怎样呢?

它会提示我们,目前main文件已经是最新了。 

现在,我们来总结一下make的好处,接着在谈makefile的基本语法。

make的好处:

        ● 简化编译时所需要执行的命令。

        ● 若在编译完成之后,修改了某个源文件的代码,则make仅会针对被修改了的文件进行编译,其他的目标文件不会被修改。

        ● 可以依照依赖性来更新执行文件。

makefile的基本语法

目标:目标文件1 目标文件2
<Tab>    gcc  -o  欲建立的执行文件  目标文件1  目标文件2  

其中,第1行叫做依赖关系。也就是说,目标执行文件的生成要依赖于目标文件1和目标文件2。第二行,注意:命令行必须以Tab键作为开头。此行叫做依赖方法。也就是指明了目标执行文件是如何依赖目标文件1和目标文件2的。下面总结makefile的基本语法:

        ● 在makefile中#表示注释。

        ● 命令行必须以<Tab>键作为开头。

        ● 目标与目标文件之间需要以 [ : ] 隔开。

下面,我们接着上面的例子,讲一讲如何执行一个命令就可以清掉所有的目标文件和执行文件。

这里,定义了一个clean,它没有依赖关系,只有依赖方法。我们来看看执行clean的效果。

执行clean时,它实际上执行的是它对应的依赖方法,确实把所有的.o文件和目标文件都删除了。但是,makefile中重复的数据是不是有点多了?下面我们借助Shell脚本来简化makefile。

我们来执行看看效果。

这是符合预期的。makefile中的OBJS就是我们定义的一个变量,我们通过这个变量来简化了makefile,下面我们看看变量的基本语法。

        ● 变量与变量内容用=隔开,同时两边可以具有空格。

        ● 在习惯上,变量最好以大写字母为主。

        ● 运用变量时,以$(变量)或${变量}使用。

介绍一个特殊变量:$@,代表当前的目标(例如上面的main)。利用这点,我们再来把makefile简化一下。

git的使用

CentOS下,安装指令:sudo yum install -y git

Ubuntu下,安装指令:sudo apt install -y git

下载Gitee上的项目到本地

命令:git clone [url]

url表示项目的链接。

下面我以我自己在Gitee上的仓库为例进行实操(当然,你也可以创建一个新的仓库进行测试)。


 


 

复制框住的命令到终端执行就可以将此仓库中的所有代码下载到本地了。我的仓库里代码较多而且很杂,请使用自己的仓库进行测试。

执行完该指令后,Gitee上的代码确实下载到了本地。


 

git的配置 

将下面框住的指令复制到终端执行即可。


 

好了,如何下载Gitee上的项目已经讲解完毕,下面进入git的三板斧,以test.c文件为例。

三板斧第一招:git add 

1)将test.c移到pchlany中。

2)git add test.c

此时,只是把test.c添加到了git的暂存区中。

介绍一个命令:git status —— 显示当前工作目录和暂存区的状态。

三板斧第二招:git commit 

三板斧第三招:git push

 

下面,我们到Gitee仓库里看看,有没有提交成功。

 可以看到,确实提交成功了。 


本文到这就结束啦~感谢您的支持! 


http://www.kler.cn/a/315727.html

相关文章:

  • C++模板特化实战:在使用开源库boost::geometry::index::rtree时,用特化来让其支持自己的数据类型
  • AutoCad 无界面开发
  • k8s集群安装(kubeadm)
  • Unity3D
  • Django博客网站上线前准备事项
  • 使用electron-egg把vue项目在linux Ubuntu环境下打包并安装运行
  • 基于web的工作管理系统设计与实现
  • MacOS升级Ruby版本的完整指南
  • Apache subversion 编译流程
  • Delphi 12.2 新增的 WebStencils 尝鲜
  • Vue.js与Flask/Django后端配合
  • HarmonyOS鸿蒙开发实战(5.0)表情图片聊天案例实践
  • 后端-navicat查找语句(单表与多表)
  • atcoder abc372 启发式合并, dp
  • 感知算法引入时序模型的优势
  • Unity UGUI的核心渲染组件
  • FFmpeg中结构释放小函数
  • Python在数据科学与机器学习中的应用
  • C语言 | Leetcode C语言题解之第429题N叉树的层序遍历
  • Nginx简介;Nginx安装
  • Chainlit集成LlamaIndex实现知识库高级检索(自动合并检索)
  • VUE3学习---【一】【从零开始的VUE学习】
  • Java面试篇基础部分-Synchronized关键字详解
  • python爬虫中json和xml字符串的xPath和jsonpath过滤语法区别对比
  • 零工市场小程序:推动零工市场建设
  • 【Kubernetes】常见面试题汇总(三十)