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

devtools/2024/11/15 8:41:08/

目录

关于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.ppmy.cn/devtools/115566.html

相关文章

TCP: Textual-based Class-aware Prompt tuning for Visual-Language Model

文章汇总 存在的问题 原文&#xff1a;具有图像特定知识的图像条件提示符号在提升类嵌入分布方面的能力较差。 个人理解&#xff1a;单纯把"a photo of {class}"这种提示模版作为输入是不利于text encoder学习的 动机 在可学习的提示和每一类的文本知识之间建立…

【.NET全栈】ASP.NET实战—基于ASP.NET的求职系统设计与实现

文章目录 前言一、系统总体设计1、系统功能介绍2、系统架构简介 二、数据库设计1、数据表结构2、数据表关系 三、系统核心层设计1、ASP.NET AJAX客户端脚本扩展2、web.config系统配置3、数据访问类的设计4、业务对象类设计 四、表现层技术分析1、ASP.NET AJAX技术的应用2、基于…

扎克伯格的未来愿景:用智能眼镜引领数字社交新时代

Meta Connect 2024大会前夕&#xff0c;创始人马克扎克伯格的90分钟播客访谈&#xff0c;为我们描绘了Meta未来的蓝图。这场访谈&#xff0c;不仅是大会的热身&#xff0c;更是对科技未来的一次深刻洞察。 人工智能 - Ai工具集 - 未来办公人的智能办公生活导航网 扎克伯格的未…

上海泗博EtherNet/IP转PROFIBUS DP网关EPS-320IP成都地铁项目应用案例

背景&#xff1a; 地铁&#xff0c;作为城市的活力脉搏&#xff0c;不仅是衔接城市生活的关键纽带&#xff0c;更是现代城市交通体系中不可或缺的核心组成部分。因此&#xff0c;确保地铁的稳定运行对任何一座城市都至关重要。 上海泗博自动化&#xff0c;作为与成都地铁项目合…

第k个排列 - 华为OD统一考试(E卷)

2024华为OD机试(E卷+D卷+C卷)最新题库【超值优惠】Java/Python/C++合集 题目描述 给定参数n,从1到n会有n个整数:1,2,3,.,n,这n个数字共有 n!种排列。按大小顺序升序列出所有排列情况,并-一标记,当n=3时,所有排列如下: “123” “132” “213” “231” “312” “…

毕业设计选题:基于ssm+vue+uniapp的校园商铺系统小程序

开发语言&#xff1a;Java框架&#xff1a;ssmuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;M…

pg入门16—pg中fts dictionaries是什么

在 PostgreSQL 中&#xff0c;FTS&#xff08;全文搜索&#xff09;字典是用于处理文本数据的重要组件&#xff0c;主要用于优化全文搜索功能。FTS 字典的作用包括&#xff1a; 分词&#xff1a;将输入文本分解为单独的词汇&#xff08;tokens&#xff09;&#xff0c;如将“这…

计算机网络(月考一知识点)

文章目录 计算机网络背诵默写版计算机网络知识点&#xff08;月考1版&#xff09; 计算机网络背诵默写版 为我自己留个印记&#xff0c;本来荧光笔画的是没记住的&#xff0c;但是后面用紫色的&#xff0c;结果扫描的时候就看不见了。 计算机网络知识点&#xff08;月考1版&a…