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

相关推荐
爱笑的Sunday2 分钟前
Linux Java前后端项目 企业级0-1完整部署手册
java·linux·运维·服务器
wanhengidc6 分钟前
云手机是什么黑科技?
运维·网络·科技·安全·web安全·智能手机
minji...8 分钟前
Linux 线程同步与互斥(六) 线程安全与重入问题,死锁,线程done
linux·运维·开发语言·数据库·c++·算法·安全
Gofarlic_oms18 小时前
利用API实现ANSYS许可证管理自动化集成
运维·服务器·开发语言·matlab·自动化·负载均衡
档案宝档案管理8 小时前
权限分级管控,全程可追溯,筑牢会计档案安全防线
运维·网络·人工智能
倔强的石头10610 小时前
【Linux指南】基础IO系列(八):实战衔接 —— 给微型 Shell 添加完整重定向功能
linux·运维·服务器
观北海10 小时前
AiScan-N:AI全自动化渗透测试工具的深度技术解析
运维·自动化
Ujimatsu11 小时前
虚拟机安装Ubuntu 26.04.x及其常用软件(2026.4)
linux·运维·ubuntu
qq_4523962313 小时前
第十篇:《自动化处理验证码:OCR、接口绕过与第三方服务》
android·自动化·ocr
Agent产品评测局13 小时前
制造业生产调度自动化落地,完整步骤与避坑指南:2026企业级智能体选型与实战全景
运维·人工智能·ai·chatgpt·自动化