Makefile入门指南:跟我一起学Makefile

需积分: 17 1 下载量 114 浏览量 更新于2024-09-27 收藏 572KB PDF 举报
"跟我一起学Makefile" Makefile是Linux系统中用于自动化编译、链接和其他构建过程的文本文件。它包含了一系列规则,指导make工具如何根据依赖关系来更新目标文件。本资料是一份适合初学者的Makefile入门教程,由陈皓撰写,祝冬华整理。 **第一部分、概述** 这部分简要介绍了Makefile的作用和基本概念,说明了为什么需要使用Makefile来管理项目构建。 **第二部分、关于程序的编译和链接** 这一章节讨论了在编程过程中编译和链接的基本步骤,为理解Makefile如何管理这些步骤奠定了基础。 **第三部分、Makefile介绍** - **Makefile的规则**:规则定义了目标文件与依赖文件之间的关系,以及当依赖文件改变时如何更新目标文件。 - **示例**:通过一个简单的例子展示了一个基本的Makefile结构。 - **make的工作方式**:解释了make如何读取Makefile,解析规则,并决定哪些文件需要重新编译。 - **变量的使用**:介绍了如何在Makefile中定义和使用变量,以提高可读性和可维护性。 - **自动推导**:make可以自动推导源文件到目标文件的编译规则,简化Makefile编写。 - **另类风格的makefile**:探讨了不同风格的Makefile编写方法。 - **清除目标文件的规则**:展示了如何设置清理目标文件的规则,以便于重置项目状态。 **第四部分、Makefile总述** - **显式规则**:直接在Makefile中指定的规则。 - **隐晦规则**:make内置的默认规则,用于处理常见文件类型。 - **变量定义**:包括如何定义和使用变量。 - **文件指示**:指导make处理特定文件或目录的指令。 - **Makefile的文件名**:可以使用不同的文件名,但通常为"Makefile"或"makefile"。 - **引用其他Makefile**:如何在一个Makefile中包含或引用另一个Makefile的内容。 - **环境变量MAKEFILES**:影响make行为的环境变量。 **第五部分、书写规则** 这部分深入讲解了如何编写规则,包括规则的语法、通配符的使用、文件搜寻、伪目标、多目标、静态模式以及自动生成依赖性。 **第六部分、书写命令** - **显示命令**:如何使make在执行命令前打印命令行。 - **命令执行**:命令在make中的执行机制。 - **命令出错**:处理命令执行失败的情况。 - **嵌套执行make**:在一个Makefile中调用另一个make进程。 - **定义命令包**:将一组命令封装起来作为一个单元。 **第七部分、使用变量** - **变量基础**:基本的变量赋值和引用。 - **变量中的变量**:变量可以包含其他变量。 - **变量高级用法**:包括扩展变量值、追加值等。 - **override指示符**:覆盖Makefile或环境中的变量值。 - **多行变量**:处理跨越多行的变量值。 - **环境变量**:Makefile如何使用shell环境变量。 - **目标变量**:针对特定目标的变量。 - **模式变量**:使用模式匹配的变量。 **第八部分、使用条件判断** 讲解了如何在Makefile中实现条件语句,以根据不同的条件执行不同的构建逻辑。 **第九部分、使用函数** - **函数调用语法**:介绍Makefile中函数的使用方法。 - **字符串处理函数**:如`subst`、`patsubst`、`strip`等,用于处理字符串。 - **文件名操作函数**:如`dir`、`notdir`等,用于处理路径和文件名。 这份资料详细介绍了Makefile的基本元素、规则、变量和函数,旨在帮助读者掌握Makefile的编写技巧,以便于更高效地管理软件构建过程。通过学习,读者能够编写出适应不同项目需求的Makefile,提高开发效率。
2018-10-28 上传
什么是 makefile?或许很多 Winodws 的程序员都不知道这个东西,因为那些 Windows 的集成开 发环境(integrated development environment,IDE)都为你做了这个工作,但我觉得要作一个好的 和专业的程序员,makefile 还是要懂。这就好像现在有这么多的 HTML 编辑器,但如果你想成为一个专 业人士,你还是要了解 HTML 的标签的含义。特别在 Unix 下的软件编译,你就不能不自己写 makefile 了,会不会写 makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。 因为,makefile 关系到了整个工程的编译规则。一个工程中的源文件不计其数,并且按类型、功能、 模块分别放在若干个目录中,makefile 定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需 要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile 就像一个 Shell 脚 本一样,其中也可以执行操作系统的命令。 makefile 带来的好处就是——“自动化编译”,一旦写好,只需要一个 make 命令,整个工程完全 自动编译,极大的提高了软件开发的效率。make 是一个命令工具,是一个解释 makefile 中指令的命令 工具,一般来说,大多数的 IDE 都有这个命令,比如:Delphi 的 make,Visual C++ 的 nmake,Linux 下 GNU 的 make。可见,makefile 都成为了一种在工程方面的编译方法。 现在讲述如何写 makefile 的文章比较少,这是我想写这篇文章的原因。当然,不同产商的 make 各不相同,也有不同的语法,但其本质都是在“文件依赖性”上做文章,这里,我仅对 GNU 的 make 进 行讲述,我的环境是 RedHat Linux 8.0,make 的版本是 3.80。毕竟,这个 make 是应用最为广泛的, 也是用得最多的。而且其还是最遵循于 IEEE 1003.2-1992 标准的(POSIX.2)。 在这篇文档中,将以 C/C++ 的源码作为基础,所以必然涉及一些关于 C/C++ 的编译的知识。关于 这方面的内容,还请各位查看相关的编译器的文档。这里所默认的编译器是 UNIX 下的 GCC 和 CC。
2018-08-07 上传
跟我一起写 Makefile 作者:陈皓 整理:祝冬华 来源网络,希望能与大家分享这份学习资料,资源分数也设置了最低值,如有侵权,请联系我删除文件。 第一部分、概述 (6) 第二部分、关于程序的编译和链接 (6) 第三部分、Makefile 介绍 (7) 一、Makefile的规则 (7) 二、一个示例 (8) 三、make是如何工作的 (9) 四、makefile中使用变量 (10) 五、让make自动推导 (11) 六、另类风格的makefile (12) 七、清空目标文件的规则 (13) 第四部分、Makefile 总述 (13) 一、Makefile里有什么? (13) 1、显式规则。 (14) 2、隐晦规则。 (14) 3、变量的定义。 (14) 4、文件指示。 (14) 5、注释。 (14) 二、Makefile的文件名 (15) 三、引用其它的Makefile (15) 四、环境变量 MAKEFILES (16) 五、make的工作方式 (16) 第五部分、书写规则 (17) 一、规则举例 (17) 二、规则的语法 (17) 三、在规则中使用通配符 (18) 四、文件搜寻 (19) 五、伪目标 (20) 六、多目标 (22) 七、静态模式 (22) 八、自动生成依赖性 (24) 第六部分书写命令 (25) 一、显示命令 (26) 二、命令执行 (26) 三、命令出错 (27) 四、嵌套执行make (28) 五、定义命令包 (30) 第七部分使用变量 (30) 一、变量的基础 (31) 二、变量中的变量 (32) 三、变量高级用法 (34) 四、追加变量值 (37) 五、override 指示符 (37) 六、多行变量 (38) 八、目标变量 (39) 九、模式变量 (40) 第八部分使用条件判断 (40) 一、示例 (40) 二、语法 (42) 第九部分使用函数 (43) 一、函数的调用语法 (44) 二、字符串处理函数 (44) 1、subst (44) 2、patsubst (45) 3、strip (45) 4、findstring (46) 5、filter (46) 6、filter-out (46) 7、sort (47) 8、word (47) 9、wordlist (47) 10、words (47) 11、firstword (48) 12、字符串函数实例 (48) 三、文件名操作函数 (48) 1、dir (48) 2、notdir (48) 3、suffix (49) 4、basename (49) 5、addsuffix (49) 6、addprefix (49) 7、join (50) 四、foreach 函数 (50) 五、if 函数 (50) 六、call函数 (51) 七、origin函数 (51) “undefined” (52) “default” (52) “file” (52) “command line” (52) “override” (52) “automatic” (52) 八、shell函数 (53) 九、控制make的函数 (53) 1、error (53) 2、warning (54) 第十部分 make 的运行 (54) 二、指定Makefile (54) 三、指定目标 (55) “all” (56) “clean” (56) “install” (56) “print” (56) “tar” (56) “dist” (56) “TAGS” (56) “check”和“test” (56) 四、检查规则 (57) 五、make的参数 (57) 第十一部分隐含规则 (61) 一、使用隐含规则 (61) 二、隐含规则一览 (62) 1、编译C程序的隐含规则 (63) 2、编译C++程序的隐含规则 (63) 3、编译Pascal程序的隐含规则 (63) 4、编译Fortran/Ratfor程序的隐含规则 (63) 5、预处理Fortran/Ratfor程序的隐含规则 (63) 6、编译Modula-2程序的隐含规则 (63) 7、汇编和汇编预处理的隐含规则 (64) 8、链接Object文件的隐含规则 (64) 9、Yacc C程序时的隐含规则 (64) 10、Lex C程序时的隐含规则 (64) 11、Lex Ratfor程序时的隐含规则 (65) 12、从C程序、Yacc文件或Lex文件创建Lint库的隐含规则 (65) 三、隐含规则使用的变量 (65) 1、关于命令的变量。 (65) 2、关于命令参数的变量 (66) 四、隐含规则链 (67) 五、定义模式规则 (68) 1、模式规则介绍 (68) 2、模式
2009-02-23 上传
Makefile 在 Unix 上写程式的人大概都碰过 Makefile,尤其是用 C 来开发程式的 人。用 make 来开发和编译程式的确很方便,可是要写出一个 Makefile 就不简单了。偏偏介绍 Makefile 的文件不多,GNU Make 那份印出来要几 百页的文件,光看完 Overview 就快阵亡了,难怪许多人闻 Unix 色变。 本文将介绍如何利用 GNU Autoconf 及 Automake 这两套软体来协助我们 『自动』产生 Makefile 档,并且让开发出来的软体可以像 Apache, MySQL 和常见的 GNU 软体一样,只要会 ``./configure'', ``make'', ``make install'' 就可以把程式安装到系统中。如果您有心开发 Open Source 的软体,或只是想在 Unix 系统下写写程式。希望这份介绍文件能 帮助您轻松地进入 Unix Programming 的殿堂。 1. 简介 Makefile 基本上就是『目标』(target), 『关连』(dependencies) 和 『动作』三者所组成的一连串规则。而 make 就会根据 Makefile 的规则 来决定如何编译 (compile) 和连结 (link) 程式。实际上,make 可做的 不只是编译和连结程式,例如 FreeBSD 的 port collection 中, Makefile 还可以做到自动下载原始程式套件,解压缩 (extract) ,修补 (patch),设定,然後编译,安装至系统中。 Makefile 基本构造虽然简单,但是妥善运用这些规则就也可以变出许多不 同的花招。却也因此,许多刚开始学习写 Makefile 时会感到没有规范可 循,每个人写出来的 Makefile 长得都不太一样,不知道从何下手,而且 常常会受限於自己的开发环境,只要环境变数不同或路径改一下,可能 Makefile 就得跟着修改。虽然有 GNU Makefile Conventions (GNU Makefile 惯例) 订出一些使用 GNU 程式设计时撰写 Makefile 的一些标 准和规范,但是内容很长而且很复杂, 并且经常做些调整,为了减轻程式 设计师维护 Makefile 的负担,因此有了 Automake。 程式设计师只需写一些预先定义好的巨集 (macro),交给 Automake 处理 後会产生一个可供 Autoconf 使用的 Makefile.in 档。再配合利用 Autoconf 产生的自动设定档 configure 即可产生一份符合 GNU Makefile 惯例的 Makeifle 了。