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将缓冲区的数据流进行刷新,防止标准输出流没有显示

相关推荐
睡不醒的猪儿15 小时前
k8s部署自动化工具jenkins
云原生·kubernetes·自动化·jenkins
运维帮手大橙子15 小时前
Docker监控系统中添加NodeExporter
linux·运维
susu108301891115 小时前
FAT32/VFAT 文件系统不支持 Linux 文件权限,cp文件总是异常
linux·运维·服务器
絔离15 小时前
Linux下查看系统启动时间、运行时间
linux·运维·服务器
七夜zippoe16 小时前
Xshell效率实战三:SSH管理秘籍——自动化脚本与宏命令进阶指南
运维·自动化·ssh
GIS数据转换器17 小时前
城市基础设施安全运行监管平台
大数据·运维·人工智能·物联网·安全·无人机·1024程序员节
Mr.H012718 小时前
gitbash链接远程仓库时,出现的ssh密钥链接问题
运维·服务器·ssh·bash
小小小糖果人18 小时前
Linux云计算基础篇(24)-PXE批量安装和Kickstart工具
linux·运维·php
wanhengidc18 小时前
云手机是一种应用软件吗?
运维·服务器·网络·游戏·智能手机·1024程序员节
嵌入式-老费18 小时前
Easyx图形库应用(工业自动化领域的应用)
运维·自动化·1024程序员节