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

相关推荐
神秘的土鸡1 小时前
Linux中使用Docker容器构建Tomcat容器完整教程
linux·运维·服务器·docker·容器·tomcat
Lossya1 小时前
【自动化测试】常见的自动化遍历工具以及如何选择合适的自动化遍历工具
自动化测试·功能测试·测试工具·自动化·测试
TravisBytes1 小时前
linux 系统是如何收发数据包
linux·运维·服务器
德迅--文琪3 小时前
SCDN是服务器吗?SCDN防御服务器有什么特点?
运维·服务器
ice___Cpu3 小时前
Linux 基本使用和 web 程序部署 ( 8000 字 Linux 入门 )
linux·运维·前端
z202305083 小时前
linux 之0号进程、1号进程、2号进程
linux·运维·服务器
Hqst_Kevin4 小时前
Hqst 品牌 H81801D 千兆 DIP 网络变压器在光猫收发器机顶盒中的应用
运维·服务器·网络·5g·网络安全·信息与通信·信号处理
honey ball5 小时前
仪表放大器AD620
运维·单片机·嵌入式硬件·物联网·学习
秋已杰爱5 小时前
进程间关系与进程守护
运维·服务器
Flying_Fish_roe5 小时前
linux-软件包管理-包管理工具(Debian 系)
linux·运维·debian