当前位置: 首页 > news >正文

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

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

  • make与Makefile
    • 单文件Makefile
    • 多文件Makefile
  • 缓冲区

首先理清多文件之间的关系:

在这里插入图片描述
这里为什么没有包含test.h头文件?因为在当前工作目录下,因此不需要包含test.h,如果把test.h移到上一级目录,则就不会编译通过了
在这里插入图片描述
再将test.h移动到当前路径下,则就可以编译通过了
在这里插入图片描述
在这里插入图片描述
一般建议先形成目标文件,再将目标文件进行链接形成可执行文件(一般建议这样子进行,因为若进行100个文件进行编译,用上面那种方法,需要编译100个文件,而用现在这种先编译后链接的方法好处是,若有一个文件修改了,则只需要将这一个文件重新进行编译 然后再去链接 而不是重新编译100个文件)

在这里插入图片描述

make与Makefile

会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作
makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。

make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。
make是一条命令,makefile(或Makefile)是一个文件,两个搭配使用,完成项目自动化构建。

单文件Makefile

首先对于单个test.c文件来说:
makefile中所放的是依赖关系和依赖方法
在这里插入图片描述

Makefile所包含的:依赖关系、依赖方法
在这里插入图片描述
在这里插入图片描述
之后对test.c进行任何修改以后,只需要重新输入make即可自动编译
在这里插入图片描述

在这里插入图片描述
即:
在这里插入图片描述

最后生成完也可以把临时文件清理掉
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

执行完进行清理工作
在这里插入图片描述

多文件Makefile

对于多文件的编译方法:在这里插入图片描述

默认生成同名的.o文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
同理加上清理资源的代码:
在这里插入图片描述

清理完即:
在这里插入图片描述
扩展:
在这里插入图片描述

缓冲区

在这里插入图片描述

ls > Makefile 可以让文件名重定向写入文件中

则此时Makefile默认为:
在这里插入图片描述
修改为:
在这里插入图片描述

想让一条指令执行完接着执行下一条指令中间加;
ls;pwd

在这里插入图片描述

注意此处:
在这里插入图片描述
printf中含有\n的时候,是先打印的hello world 最后再进行的sleep(5)
在这里插入图片描述
但是去掉\n后:
在这里插入图片描述
在这里插入图片描述
是先sleep(5)之后再输出的hello world 这是为什么?
在 Linux 中,printf(“hello world”) 的输出延迟到 sleep(5) 之后显示,是因为 标准输出(stdout)的缓冲机制 导致的。

#include "proc.h"
int main() {
    printf("hello world");  // 输出内容在缓冲区中,未立即刷新
    // 注意此时printf是先执行的,但是并不代表是先打印的
    sleep(5);               // 程序休眠 5 秒,缓冲区未刷新
    return 0;               // 程序结束,刷新缓冲区,显示内容
}

行缓冲(Line Buffering)
当程序向终端输出时,stdout 默认采用行缓冲模式。此时,只有满足以下条件之一,缓冲区的内容才会被刷新(显示到终端):遇到换行符 \n、缓冲区被填满、程序正常结束(如 main 函数返回)。

全缓冲(Full Buffering)
如果 stdout 被重定向到 文件,则采用全缓冲模式,此时必须手动刷新或缓冲区填满才会输出。

总结:
在这里插入图片描述
\n:回车换行
\r回车:光标回到本行的最开始 不断打印重复内容 覆盖上次内容以实现一个动态内容
fflush:立即刷新出来而非等缓冲区
在这里插入图片描述

相关文章:

  • 跟我学C++中级篇——定时器的设计
  • 初阶数据结构(C语言实现)——3顺序表和链表(3)
  • 《第十五部分》STM32之FLASH闪存(终结篇)
  • (九)趣学设计模式 之 桥接模式!
  • 综合练习 —— 递归、搜索与回溯算法
  • 第十五届蓝桥杯单片机组4T模拟赛三(第二套)
  • 区县级水司一体化抄表营业收费系统设计思路
  • Datawhale 数学建模导论二 笔记5 多模数据与智能模型
  • Rk3568驱动开发_新字符设备驱动原理_7
  • sessioncookie 2.0(示例篇)
  • 数据结构与算法-图论-最短路和其他的结合
  • 学睿德毅AI 赋能教育拓展短视频创作边界
  • 基于Electron的应用程序安全测试基础 — 提取和分析.asar文件的案例研究
  • 【tplink】校园网接路由器如何单独登录自己的账号,wan-lan和lan-lan区别
  • 深入xtquant:Python量化交易的桥梁与核心
  • 网络安全虚拟化组成
  • 散户情绪周期模型(情绪影响操作)
  • 16.1 LangChain 表达式语言(LCEL)深度解析:构建灵活高效的大模型应用流水线
  • Nginx处理http的流程
  • 【AI+智造】基于SKF IMAX-16+PT1000与Odoo18工业物联网架构智慧生产诊断系统集成方案
  • 深夜一个人适合看的电影/长沙网站seo哪家公司好
  • 建设银行网站怎样查询贷款信息吗/常用的网络推广方法有
  • 电子商务网站开发公司/优化大师有必要安装吗
  • 宝安专业手机网站设计公司/太原竞价托管公司推荐
  • 如何做网站内链/怎样在百度上发帖子
  • 天津做网站的公司有哪家/东莞网络营销推广公司