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

make和makefile有什么用?

一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的

规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂

的功能操作

makefile带来的好处就是------"自动化编译",一旦写好,只需要一个make命令,整个工程完全自动编

译,极大的提高了软件开发的效率。


我们首先要明确make是一个指令,而makefile是一个文件(依赖关系和依赖方法)

什么是依赖关系和依赖方法:

依赖关系:我为什么要帮你

依赖方法:怎么帮

具体实例:

TIP:

1、Makefile和make形成目标文件的时候,默认是从上到下扫描makefile文件的。

2、默认只形成一个

问题:make和makefile怎么知道可执行程序是比较新的呢?

答:这个是通过对比时间比出来的,只要可执行程序的最近修改时间比所有源文件的最近修改时间新,说明它就是最新的!

认识一下时间:(ACM)

stat关键字查询文件的时间

文件 = 内容 + 属性

这里一共有三个时间,具体文件的时间与modify(文件内容)一致。

access表示进入文件的时间(可能不会实时)

modify表示修改文件内容的具体时间

change表示修改文件属性的具体时间

下面的各个点都表示文件的属性,因此modify修改,change一定会修改;而change(属性)修改,modify(内容)不一定修改!!!

我们可不可以在文件内容没有更新的情况下强制执行命令呢?

可以,这里需要另一个语法 .PHONY:

其中mybin也可以这样书写

问题:我们这里为什么不把伪目标加到生成可执行文件上,而是加到clean上呢?

假设我们有一个大项目,里面包含了几百个源文件,如果我们只修改其中的几个源文件,这时加上伪目标,仍然生成几百个可执行文件,就大大浪费时间空间等资源,我们只需要生成我们修改过的源文件即可。


Linux第一个小程序------进度条

第一个小技巧:

我们以后再写程序之前,先把makefile跑通之后再写test.c的内容。

1、预备的两个小知识

a、缓冲区

输出结果没有立刻输出 you can see me

而是等了3秒钟,才将结果输出,难道是先执行sleep(3) 吗?

我们时刻铭记程序的执行顺序一定是顺序结构的!

因此正确的解释就是printf已经跑完,输出的字符串一定是被保存起来了。被保存的地点就是缓冲区。在退出程序的时候,才刷新出来。

b、回车和换行

回车和换行本质上来说是两个东西。

在老式的键盘中,enter键长这样。

换行就是将内容换到下一行。

回车是将光标放在这一行的最初始位置。

先换行再回车,才有了enter的效果。

下面是普通版本的

cpp 复制代码
 1 #include<stdio.h>
  2 #include<unistd.h>
  3 
  4 int main()
  5 {
  6     int cnt = 9;
  7     while(cnt)
  8     {
  9         printf("%d\r", cnt);
 10         fflush(stdout);//刷新标准输出流
 11         cnt--;
 12         sleep(1);
 13     }
 14                                                                                                                                                                  
 15     return 0;//程序就开始结束
 16 }

\r表示回车,就是将光标重新放在第一位。

其中fflush将缓冲区的数据流进行刷新,防止标准输出流没有显示

相关推荐
宇钶宇夕25 分钟前
EPLAN 电气制图:建立自己的部件库,添加部件-加SQL Server安装教程(三)上
运维·服务器·数据库·程序人生·自动化
susu10830189111 小时前
Debian 11 Bullseye 在线安装docker
运维·docker·debian
love530love1 小时前
Docker 稳定运行与存储优化全攻略(含可视化指南)
运维·人工智能·windows·docker·容器
岁岁岁平安1 小时前
CentOS-7-x86_64解决:使用NAT模式无法ping通www.baidu.com或无法ping 8.8.8.8问题。
linux·运维·centos·centos-7
运维小贺2 小时前
各服务器厂商调整BIOS睿频教程
linux·运维·服务器·性能优化
网硕互联的小客服2 小时前
如何排查服务器中已经存在的后门程序?
运维·服务器·github
人生匆匆2 小时前
docker进入启动失败的容器
运维·docker·容器
Fanmeang2 小时前
OSPF路由过滤
运维·网络·华为·ip·路由·ospf·路由过滤
★Orange★2 小时前
Linux Kernel kfifo 实现和巧妙设计
linux·运维·算法
bemyrunningdog3 小时前
Mock数据
linux·运维·ubuntu