【Linux】项目自动化构建工具——make/Makefile及拓展
创始人
2024-04-01 17:48:25

文章目录

    • 一、Linux项目自动化构建工具-make/Makefile
      • 1、背景知识
      • 2、实现代码
      • 3、原理
      • 4、清理
        • 4.1.清理文件/临时数据
        • 4.2.伪目标
        • 4.3.三个时间
      • 5、推导规则
    • 二、小程序进度条
    • 三、拓展
      • 使用 git 命令行

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

1、背景知识

一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作

makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率 .make是一个命令工具,是一个解释makefile中指令的命令工具

make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建


2、实现代码

我们先来看一下具体是怎么一回事:

创建文件mycode.c利用vim进入编写一个简单的程序,创建文件makefile(m可以大写)编写依赖关系和依赖方法,最后直接通过make完成编译。生成mycode

image-20221024142033430


3、原理

makefile的具体原理:

必须包含依赖关系和依赖方法

makefile存在的意义,为了构建项目。对于上面的例子,mycode的形成依赖于mycode.c,所以需要把mycode.c进行编译线程mycode

初识makefile的语法

第一步,建立依赖关系,谁依赖:于谁(比如mycode依赖于mycode.c,因为mycode.c是我们自己创建出来的,mycode是通过其编译出来的)

第二步,新起一行,必须以tab键开头,gcc mycode.c -o mycode

image-20221024145459583

image-20221024145536993

4、清理

4.1.清理文件/临时数据

image-20221024151324803

image-20221024151444746

不需要我们再去使用gcc命令了。同时,这里我们需要知道:

image-20221024152120405

4.2.伪目标

这里的.PHONY:被该关键字修饰的对象是一个伪目标。但是如果我们一直make clean呢

image-20221024152421413

伪目标表示该目标总是被执行的

image-20221024152647403

image-20221024152723736

4.3.三个时间

这里插入另一个问题,gcc是如何得知不需要编译了的(在没有加伪目标下,直接显示…is up to date.):(比较时间)

image-20221024153530351

image-20221024153854775

modify和chance的时间改变容易理解,但是对于Access时间的改变:

由于access访问的频率太高,一直被修改,导致负担过大。新内核对其进行了修正,根据一段时间内访问频率再去更新。

在第一次编译的时候一定先有源文件,再有可执行程序,所以第一次的mycode.c的modify时间要比mycode的modify时间要更早

如果后来mycode没修改,而把mycode.c修改了。所以识别就看mycode.c时间是不是比mycode的时间更新,如果更新,就重新编译

简单验证一下把:

image-20221024162117436

所以用.PHNOY不需要根据时间来做对比。每次都需要编译。

make默认从上到下执行,第一个被找到的直接用make执行,总是调用第一个,后面不在执行。而调用其他的需要手动指明

5、推导规则

理解makefile的推导规则:还是mycode.c到mycode的过程,不过我们需要把过程细化出来,把推导关系完善:

image-20221024174249057

image-20221024174620576

可以看出,这是逆着来的。在make推导的时候会根据依赖关系而推导,从上到下,当依赖文件列表不存在会继续根据依赖文件列表所对应的项而继续。

不过平时直接一步到位即可


二、小程序进度条

  • 缓冲区问题

image-20221025084913337

image-20221025084933078

效果是先睡眠在打印,我们可以知道先printf,但是执行完printf后数据没被显示出来,在sleep期间,printf已经执行打印了,但是数据在缓冲区中,这就是为什么会先睡眠后才把数据显示出来。要把数据立即显示出来,我们直接刷新缓冲区,fflush(stdout)

image-20221025085338301

但是直接在printf中加上\n也可以直接显示出来,\n是行缓冲

同时,\r称为回车,\n称为换行,所以\r\n就是回车换行,但是在语言层面,\n就是回车换行

到这里,我们可以利用上面的写10个倒计时:

image-20221025090725088

有了上面的铺垫之后,下面,我们直接来写一个进度条:

所创建的文件:

image-20221025150253716

image-20221025150531192

image-20221025150604734

image-20221025150623207

image-20221025150929124


三、拓展

使用 git 命令行

这里以gitee为例子。

  • git clone

克隆远程仓库

git clone

image-20221025184753550

image-20221025204229477

.gitignore凡事这个文件内部的后缀,都不会被上传到gitee上的。

所谓的git仓库,本质就是一个目录,以及里面的内容。而push到远端就是将.git的内容同步到gitee上

  • git.add

将新增的文件添加到本地仓库

image-20221025215803940

  • git commit

提交。-m 后面加上提交的日志

image-20221025221017883

  • git push

将本地内容推送到远端

image-20221025221528236

image-20221025221551787

  • git log

查看提交日志

image-20221025222012540

  • git status

查看当前状态

image-20221025225721435

当文件发生变化时:

  • git pull

把远端拉到本地同步。(如果远端和本地都同步进行修改了,起冲突了,直接先pull一下)

此外,对于git push的时候要输入用户名和密码可以配置成免密码的。

相关内容

热门资讯

长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...