本篇目标:

• 掌握简单的Makefile编写,了解其运行思想

• 编写自己的第一个Linux程序:进度条

 

一.自动化构建-make/Makefile

1.基本使用

1.1.背景

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

好处:自动化编译,提高了软件开发的效率

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

1.2.演示

例如我们在目录中,创建了一个myproc.c文件,里面的内容如图:,寻常而言,我们可能会用gcc来编译,但是有了makefile后,我们可以这样弄:

先创建一个makefile/Makefile文件(不可以是其他的文件名),再在文件中输入以下的内容:

注意:输入依赖关系gcc -o myproc myproc.c时,不要用enter后的换行4格,要按TAB键!!!

myproc:myproc.c
    gcc -o myproc myproc.c
.PHONY:clean
clean:
    rm -f myproc

在执行make,就会出现以下的内容:

可以看出,make操作时,自动操作了gcc,生成了myproc这个可执行程序,直接./myproc:就会出现结果,如果此时再执行make clean

结果如下:

直接就执行了rm -f的操作,那这是为什么呢?

1.3.依赖关系与依赖方法

上面的文件myproc,它依赖myproc.c,但是光又关系不行,还要方法,也就是gcc -o myproc myproc.c ,就是与之对应的依赖关系

1.4.项目清理

作用:删除之前编译生成的 .o 文件和可执行文件,准备重新编译,.c文件其实是不需要删除的。

1.5.什么叫做总是被执行?

可以看出make仅能被执行一次,而make clean可以执行多次,这是因为.PHONY的作用,可以让make clean总是被执行

那么make是如何判断操作总是被执行的呢?

解释:先操作stat,如图:

文件 = 内容 + 属性

Modify: 内容变更,时间更新

Change :属性变更,时间更新

Access :常指的是文件最近⼀次被访问的时间。

因此有了时间的属性,就可以判断。

注意:.PHONY:让make忽略源文件和可执行目标文件的M时间对比

2.推导过程

假如makefile中,有以下的内容:

过程:

3.适度扩展语法

二.进度条

1.回车与换行

概念:

回车:回到行首,但不向下移动。

换行:打字头向下移动一行,但不回到行首。

所以回车换行就是回到下一行的行首。

2.行缓冲区

假如在myproc.c有以下的内容:,输出结果:

其实如果我门自己观察就会发现先输出,再暂停3秒。

那如果将\n删去呢?输出结果:

其实如果我门自己观察就会发现先暂停3秒,再输出,这是因为之前我们有\n可以刷新缓冲区,但是没有\n后,hello bite!就会在缓冲区里面,当程序退出时,就会自动刷新缓冲区。

如果我们想要立马刷新缓冲区,就要以下的操作:,就可以了。

注:\r 是一个转义字符,代表 回车,但是光标只回到当前行的开头,如果接着打印字符,它会覆盖掉这一行原本的内容,头文件为"unistd.h"。

3.倒计时程序

如图:

4.进度条代码

在process.h中:

在process.c中:

在processmain.c中:

 

 

 

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐