【Linux】基础开发工具(4):自动化构建--make/makefile

前文回顾:【Linux】基础开发工具(3):编译器


目录

[一 自动化工程构建----make/makefile](#一 自动化工程构建----make/makefile)

[1 背景](#1 背景)

[2 见一下怎么用](#2 见一下怎么用)

[3 理解Makefile/make,编译工作的推导过程,依赖关系和依赖方法](#3 理解Makefile/make,编译工作的推导过程,依赖关系和依赖方法)

[4 makefile最佳实践和实用语法](#4 makefile最佳实践和实用语法)


一 自动化工程构建----make/makefile

1 背景

· 会不会写 makefile,从一个侧面说明了一个人是否具备完成大型工程的能力

・一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile 定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作

・makefile 带来的好处就是 ------"自动化编译",一旦写好,只需要一个 make 命令,整个工程完全自动编译,极大的提高了软件开发的效率。

・make 是一个命令工具,是一个解释 makefile 中指令的命令工具,一般来说,大多数的 IDE 都有这个命令,比如:Delphi 的 make,Visual C++ 的 nmake,Linux 下 GNU 的 make。可见,makefile 都成为了一种在工程方面的编译方法 。

・make 是一条命令,makefile 是一个文件,两个搭配使用,完成项目自动化构建。

make:一个命令

makefile/Makefile:文件--->描述的是如何翻译当前工程

2 见一下怎么用

3 理解Makefile/make,编译工作的推导过程,依赖关系和依赖方法

Makefile/make是依赖关系和依赖方法的集合

目标code依赖于源文件code.c,执行make命令时会自动调用gcc -o code code.c命令,将code.c编译为可执行文件code

**思考:**为什么执行code:code.c时,make后面没有跟东西,而执行clean时要写make clean?如果将上面代码的顺序换一下呢?

make/makefile:具体如何形成可执行程序的呢??推导的过程

make从上到下遇到的第一个文件,把对应的指令入栈,依次遍历,直到遍历结束,之后开始出栈,直到栈为空。当程序执行函数调用时,会将当前指令的下一条地址(返回地址)压入栈,函数执行完毕后,从栈中弹出该地址,回到原来的执行位置。

make如何知道code.c是否需要被重新编译?

清理工程

makefile使用#注释,vim用单引号注释

源文件与目标文件的 Modify 时间对比逻辑:

C 程序编译前后的文件状态对比:

4 makefile最佳实践和实用语法

malidfile最佳实践:

编译器将多个 C 源文件(如add.c、sub.c)转换为目标文件(.o文件,如add.o、sub.o),之后链接器将目标文件与库文件结合,生成可执行程序。

@(代表当前规则的 "目标",即code.exe)、^(代表当前规则的 "所有依赖",即code.o)

Makefile 变量定义:统一管理构建路径

makefile批量化处理:

做法一:

做法二:

相关推荐
katasea4 小时前
第05章:信创技术栈选型:服务器、操作系统、数据库、中间件适配对比
服务器·数据库·中间件
筑梦之路4 小时前
Alibaba Cloud Linux 4 IPXE全自动安装(直连官方源)——筑梦之路
linux·运维·服务器·国产化·阿里云操作系统
encoderlee4 小时前
ubuntu server 如何播放视频显示网页
linux·ubuntu·音视频·树莓派·ubuntu server·arm嵌入式
云计算练习生5 小时前
什么是 Linux?从 Unix 到开源生态的完整脉络
linux·开源·操作系统·unix
Pointer Pursuit5 小时前
make / Makefile
linux·运维·服务器
ZhangJun955 小时前
Linux常用命令笔记,中高级运维高频指令,并附上vim常见操作
linux·运维·centos·云计算·vim
逐流人5 小时前
Ceph对象存储与文件系统存储管理:从RADOS网关、S3与Swift到CephFS快照同步
linux·运维·ceph·云原生·云计算·swift·rados
分布式存储与RustFS5 小时前
日志目录的预算是 2 GiB:轮转、保留和压缩这三件事
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
wdfk_prog5 小时前
Wi-Fi Direct 教程 05:control socket 与 eloop——P2P_FIND 怎样进入 wpa_supplicant 命令解析器
运维·服务器·后端·网络协议·ubuntu·p2p·wifi-direct
Golden_Chen5 小时前
在 Ubuntu 上搭建 FTP 服务器
linux·运维·服务器