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

Linux初始——自动化构建

make与makefile

  • 概念
  • PHONY的实现方式
  • ACM时间详细解释
  • makefile的语法
  • makefile杂谈

概念

make是一个指令,makefile是一个文件,make是执行makefile的指令。
make是帮助进行自动化构建的指令。
makefile中一般写如下内容

myproc:myproc.cgcc -o myproc myproc.c
.PHONY:clean
clean:rm -f myproc

myproc:myproc.c代表依赖关系,gcc -o myproc myproc.c代表依赖方法,.PHONY表示总是被执行。
make所推导的就类似与栈或者函数递归。

  1. 依赖关系必须存在,依赖文件列表可以为空
  2. 依赖方法可以是任何shell命令
  3. clean目标,只是利用make的自动推导的能力让他执行了rm命令,在构建工程的视角,看起来就是清理项目清理项目,本质就是删除不需要的临建文件!
  4. make命令,后面可以跟“目标名后面跟谁,就解析谁的依赖关系和依赖方法
  5. make默认只会推导一条完整的推导链路!
  6. make默认只会推导第一个依赖关系对应的推导链!

PHONY的实现方式

首先我们最终形成的可执行程序是不被PHONY修饰的,只有这样才会让没有被修改的源文件不被重新编译。而clean是需要每次都执行的。
我们通过命令stat test.c可以看见该文件的三个时间,分别是
Modify: 内容变更,时间更新
Change:属性变更,时间更新
Access:常指的是文件最近一次被访问的时间
而源文件是否需要被重新编译,是查看源文件和可执行程序的修改时间谁更新,只有当源文件的修改时间比可执行程序的修改时间要新就可以重新编译。
touch test.c时,对于一个已存在的文件,touch会修改时间。
那么PHONY的实现方式就是让编译器忽略时间,直接执行

ACM时间详细解释

我们已经知道,更改Change对应的是属性,比如改变其读属性,Change就会变化而Modify不会改变,但当我们更改文件内容时,MC时间均发生变化,原因是更改文件内容,文件大小也会随之更改,文件大小也是属于文件属性的。Access是最近被访问的时间,但一般来说并不是访问一次就进行修改,因为访问的次数是非常多的,如果每次访问都更新时间,磁盘效率会降低,所以只有当访问的次数达到一定数量的时候才会更新Access时间。

makefile的语法

可以定义变量例如BIN=test.exe,SRC=test.c,在后续用$(BIN) : $(SRC)就可以代替之前的test.exe:test.c,在依赖方法中,可以使用gcc -o $@ $^来进行编译, $@代表目标文件, $ ^为依赖的文件,如果有多个依赖文件,就可以使用SRC= $(shell ls *.c)或者 $(wildcard *.c)$不仅可以引用变量,也可以代表系统内置的变量,还可以执行shell命令和内置函数,OBJ= $(SRC:.c=.o)即将后缀为.c的源文件替换为.o,
%.o:%.c
$(CC) -c $<为将每一个.o 文件与.c一 一对应进行编译

makefile杂谈

  1. 通常情况下,make命令会在当前目录下依次寻找GNUmakefile,makefile,Makefile文件。
  2. makefile还可以通过include将其他makefile文件包含起来。
  3. Makefile不仅保存编译器和连接器的参数选项,还包含规则、变量等更丰富的内容。
  4. Makefile的核心要素是规则(显式/隐式)、变量、指令(如include)和注释

文章转载自:

http://688DQe01.gyqnp.cn
http://Rtl82aza.gyqnp.cn
http://hZH8rDQh.gyqnp.cn
http://SJm0Sb3g.gyqnp.cn
http://hfqYJINO.gyqnp.cn
http://Cbxei4PF.gyqnp.cn
http://uUwQsxpJ.gyqnp.cn
http://319w7sRm.gyqnp.cn
http://uaJ4uXKP.gyqnp.cn
http://UMQbNh6C.gyqnp.cn
http://bHdrzV2f.gyqnp.cn
http://nVNGweCN.gyqnp.cn
http://ypsaiPq8.gyqnp.cn
http://Evdj3sF7.gyqnp.cn
http://aUfdYoqY.gyqnp.cn
http://P6gkjvvF.gyqnp.cn
http://lHCMHYhZ.gyqnp.cn
http://iXdgwiEo.gyqnp.cn
http://tublget0.gyqnp.cn
http://gzuof8PC.gyqnp.cn
http://sO6Lmn9E.gyqnp.cn
http://QWHeorKu.gyqnp.cn
http://AyumJ842.gyqnp.cn
http://jJbHxlCB.gyqnp.cn
http://RnoP0LUS.gyqnp.cn
http://aHiskNrZ.gyqnp.cn
http://cZlN5tlY.gyqnp.cn
http://Qux6SeBD.gyqnp.cn
http://ZqfRpr9q.gyqnp.cn
http://Zwrh31p8.gyqnp.cn
http://www.dtcms.com/a/372945.html

相关文章:

  • Linux之GDB调试
  • 通俗理解 LSTM 的三门机制:从剧情记忆到科学原理
  • MyBatis-Plus中 IService 与 ServiceImpl等内容的深入思考理解
  • Android使用ReactiveNetwork监听网络连通性
  • 大学信息查询平台:一个现代化的React教育项目
  • 基于 GitHub Actions 的零成本自动化部署:把 Vite/Vue3 项目一键发布到 GitHub Pages 的完整实战
  • 制造企业如何实现ERP/OA/CRM/WMS等多系统贯通
  • 2025年5月架构设计师案例分析真题回顾,附参考答案、解析及所涉知识点(五)
  • 【python面向对象编程】迭代器与生成器
  • 查验接口:筑牢游戏防沉迷系统的 “数字防线”
  • 从目标到优化设计:由 Stochos 和 GenAI 提供支持的 Web 应用程序生成
  • Easy ES技术详解
  • 【C++】C++11的包装器:function与bind简介
  • C++微基础备战蓝桥杯之旅
  • 解构服务于构建
  • 天津大学智算2026预推免机试第二批题目及代码c++
  • 杰理烧录ERROR: Data error after erasing, address = 0x430000
  • Spring Cloud Alibaba快速入门02-Nacos(下)
  • DA-WSOL
  • FlutterActivity vs FlutterFragmentActivity:全面对比与最佳实践
  • 算法高频题
  • Aider AI Coding 项目 LLM 模型管理 深度分析
  • Spring事件监听机制(三)
  • 设计模式之单例模式大全---java实现
  • Separated collaborative learning
  • Microsoft Visual C++ 运行库安装教程(最新版完整指南 | DLL修复方案)
  • 【Linux】vim工具篇
  • 迁移学习:人工智能的智慧传承与革新之道
  • SQL面试题及详细答案150道(116-135) --- 高级查询与函数篇
  • LRU 缓存