GNU Make是Unix和类Unix系统中的一个自动化构建工具,它的作用是通过读取Makefile文件中的指令来实现自动化的编译过程。Makefile文件中包含了一系列规则来指定编译目标、依赖关系以及用于编译的命令。GUN Make的最新稳定版本是3.81,本手册将围绕这个版本进行介绍。 在Makefile的内容部分,我们首先需要了解Makefile文件的命名规则。通常,Makefile的文件名是Makefile或makefile。Makefile的命名非常重要,因为make命令默认会寻找这两个文件名中的一个来执行。 包含其它Makefile文件可以通过include语句实现,当Makefile文件较大或者有多个项目需要共享某些规则时,这种方式非常有用。变量MAKEFILES用于指定额外的Makefile文件,而变量MAKEFILE_LIST则记录了当前已经加载的Makefile文件列表。 变量的设置对于Makefile来说非常重要,make提供了两种变量定义方式,分别是递归展开式变量和直接展开式变量。递归展开式变量会保存其展开的形式,而直接展开式变量在读取时就进行展开。此外,Makefile中的变量还可以追加值,使用override指示符可以防止make命令行中的变量值覆盖Makefile中的变量值。 在Makefile规则部分,规则由目标(target)、依赖(dependencies)和命令(commands)组成。依赖可以是文件也可以是规则。Makefile的语法支持使用通配符来匹配文件名,但需要注意通配符的缺陷,比如使用VPATH变量进行一般搜索和使用vpath关键字进行选择性搜索。静态模式规则是一种特殊的规则语法,它允许你使用一个规则来匹配多个目标。 规则的命令部分介绍了如何在Makefile中书写命令。命令可以回显,也可以并发执行。命令的执行方式涉及到make命令行选项,例如-w选项可以用于调试,显示命令执行前后的工作目录。make的递归执行涉及到变量MAKE,它可以在Makefile内部调用另一个Makefile。make的内嵌函数,包括文本处理函数,为Makefile提供了强大的文本处理能力。 Makefile中的变量使用部分详细介绍了如何在Makefile中引用和定义变量。变量的引用包括简单的引用和高级用法,比如变量的替换引用和套嵌引用。make还提供了多行定义和系统环境变量的引入方式。 条件执行部分介绍了Makefile中的条件判断语法。条件判断允许根据系统的配置或者其他变量来决定执行特定的规则。Makefile的条件判断可以使用标记测试的条件语句。 Makefile的内嵌函数部分提供了Makefile中可以使用的函数。这些函数包括文本处理函数,如subst, patsubst, strip, findstring等,它们可以对文本进行查找、替换、排序等操作。 整个手册内容丰富,涵盖了Makefile的方方面面,包括Makefile的基础知识、变量和规则的使用、条件判断以及内嵌函数等。通过阅读这份手册,可以深刻理解Makefile的工作原理和编写方法,大大提升工作效率和自动化构建的能力。
2025-09-26 10:43:04 2.1MB Makefile
1
本文比较完整的讲述GNU make工具,涵盖GNU make的用法、语法。同时重点讨论如何为一个工程编写Makefile。作为一个Linux程序员,make工具的使用以及编写Makefile是必需的。系统、详细讲述make的中文资料比较少,出于对广大中文Linuxer的支持,本人在工作之余,花了18个多月时间完成对“info make”的翻译整理,完成这个中文版手册。本书不是一个纯粹的语言翻译版本,其中对GNU make的一些语法和用法根据我个人的工作经验进行了一些详细分析和说明,也加入了一些个人的观点和实践总结。本书的所有的例子都可以在支持V3.8版本的GNU make的系统中正确执行。 由于个人水平限制,本文在一些地方存在描述不准确之处。恳请大家在阅读过程中,提出您宝贵的意见,也是对我个人的帮助。我的个人电子邮箱地址:xhbdahai@126.com。非常愿意和大家交流!共同学习。 ### GUN_make中文手册知识点概览 #### 一、GNU Make工具概述 GNU Make是一款功能强大的自动化构建工具,广泛应用于软件开发过程中。它通过解析Makefile文件中的指令来管理项目的构建流程,帮助开发者自动化编译、链接等任务,极大地提高了工作效率。 **1.1 概述** GNU Make的核心是Makefile文件,它定义了项目中各个文件之间的依赖关系及如何构建这些文件。Makefile可以非常简单,只包含几行代码,也可以非常复杂,涉及大量的规则和变量定义。 **1.2 准备知识** 使用GNU Make之前,需要具备一定的基础知识,包括但不限于: - 基本的命令行操作能力。 - 对于目标文件、依赖文件、规则等概念的理解。 - 对于shell脚本有一定的了解。 #### 二、GNU Make介绍 GNU Make的核心在于如何编写有效的Makefile文件。 **2.1 Makefile简介** Makefile文件包含了构建项目的规则和变量定义。每个规则定义了一个目标(通常是输出文件),以及构建该目标所需的依赖文件和命令。 **2.2 Makefile规则介绍** 规则是Makefile中最基本的组成部分,其格式通常为: ``` target : dependencies command ``` - `target`:目标文件。 - `dependencies`:构建目标所需要的依赖文件。 - `command`:构建目标所需的命令。 **2.3 简单的示例** 例如,一个简单的Makefile可能如下所示: ``` all: main.o helper.o gcc -o myprogram main.o helper.o main.o: main.c gcc -c main.c helper.o: helper.c gcc -c helper.c ``` **2.4 make如何工作** 当make被调用时,它会读取Makefile文件并根据其中定义的规则执行相应的命令。make会检查目标文件和依赖文件的时间戳,如果依赖文件比目标文件新,则执行相应的命令来更新目标文件。 **2.5 指定变量** Makefile支持定义变量,这可以简化规则的编写。例如: ``` CC = gcc CFLAGS = -Wall -g all: main.o helper.o $(CC) $(CFLAGS) -o myprogram main.o helper.o ``` **2.6 自动推导规则** GNU Make支持自动推导规则,这意味着对于某些常见的文件扩展名,make可以自动确定如何构建目标文件而无需显式定义规则。例如,对于`.c`到`.o`的转换,make可以自动识别。 **2.7 另类风格的makefile** 除了传统的Makefile风格外,还可以使用其他风格,如使用`make -f`选项指定Makefile文件的位置。 **2.8 清除工作目录过程文件** 通常还需要定义一个`clean`目标来清除构建过程中产生的临时文件,例如: ``` clean: rm -f *.o myprogram ``` #### 三、Makefile总述 这部分深入介绍了Makefile文件的结构、命名、包含机制等。 **3.1 Makefile的内容** Makefile通常包含以下内容: - 规则定义。 - 变量定义。 - 注释和其他元数据。 **3.2 makefile文件的命名** 默认情况下,make会查找名为`Makefile`、`makefile`或`Makefile-`的文件作为构建规则的来源。 **3.3 包含其它makefile文件** Makefile支持通过`include`指令包含其他文件,这有助于组织大型项目中的构建规则: ``` include common.mk ``` **3.4 变量MAKEFILES** `MAKEFILES`变量用于记录包含的Makefile文件列表。 **3.5 变量MAKEFILE_LIST** `MAKEFILE_LIST`变量用于列出所有被包含的Makefile文件。 **3.6 其他特殊变量** GNU Make还支持其他特殊变量,例如`$@`代表目标文件,`$<`代表第一个依赖文件等。 **3.7 makefile文件的重建** 当Makefile文件发生更改时,make可以通过重新解析Makefile文件来更新规则。 **3.8 重载另外一个makefile** 有时可能需要在构建过程中动态地加载另一个Makefile文件,这可以通过`make -f`命令行选项实现。 **3.9 make如何解析makefile文件** - **3.9.1 变量取值**:make在解析Makefile文件时会处理变量定义,并在需要时展开它们。 - **3.9.2 条件语句**:Makefile支持条件执行逻辑,例如使用`ifeq`、`ifdef`等指令。 - **3.9.3 规则的定义**:make解析Makefile文件中的规则,并根据需要执行命令。 **3.10 总结** 本章节涵盖了Makefile的基础结构和一些高级特性,为读者提供了编写高效Makefile的基础知识。 #### 四、Makefile的规则 这一部分详细解释了Makefile中的规则定义及其各种特性。 **4.1 一个例子** 本节通过具体的示例解释了如何定义规则。 **4.2 规则语法** 详细介绍了规则的语法结构,包括目标、依赖和命令。 **4.3 依赖的类型** 讲解了不同类型的依赖关系,如显式依赖和隐式依赖。 **4.4 文件名使用通配符** 通配符的使用可以让Makefile更加灵活,例如: ``` %.o: %.c gcc -c $< -o $@ ``` **4.5 目录搜寻** GNU Make支持通过`VPATH`变量或`vpath`关键字来搜索不在当前目录下的文件。 **4.6 Makefile伪目标** 伪目标是一种特殊的规则,用于定义不会创建任何物理文件的目标,例如`all`和`clean`。 **4.7 强制目标(没有命令或依赖的规则)** 有些目标只是为了方便构建流程而定义的,不涉及实际的文件操作。 **4.8 空目标文件** 空目标文件通常用于标记某个状态。 **4.9 Makefile的特殊目标** 特殊目标用于执行特定的功能,如`PHONY`目标。 **4.10 多目标** 一个规则可以有多个目标文件。 **4.11 多规则目标** 一个目标文件可以由多个规则定义。 **4.12 静态模式** 静态模式允许使用模式匹配来定义一系列相似的目标文件。 **4.13 双冒号规则** 双冒号规则用于定义多个依赖文件与同一个目标文件的关系。 **4.14 自动产生依赖** GNU Make支持自动检测依赖关系,这对于大型项目特别有用。 #### 五、规则的命令 这一部分详细介绍了如何为规则编写命令。 **5.1 命令回显** 命令执行前是否显示命令字符串。 **5.2 命令的执行** 命令的执行方式及其控制方法。 **5.3 并发执行命令** make支持并行执行命令以提高构建效率。 **5.4 命令执行的错误** 如何处理命令执行过程中出现的错误。 **5.5 中断make的执行** 在某些条件下中断make的执行。 **5.6 make的递归执行** 递归调用make的过程及其应用场景。 **5.7 定义命令包** 命令包的概念及其用法。 **5.8 空命令** 在某些情况下,可能需要定义空命令。 #### 六、Makefile中的变量 这部分讲解了Makefile中变量的定义、使用和一些高级用法。 **6.1 变量的引用** 如何在Makefile中引用变量。 **6.2 两种变量定义(赋值)** 介绍了两种变量定义的方式:递归展开式变量和直接展开式变量。 **6.3 变量的高级用法** 变量的替换引用、套嵌引用等高级用法。 **6.4 变量取值** 如何获取变量的实际值。 **6.5 如何设置变量** 设置变量的方法和注意事项。 **6.6 追加变量值** 追加变量值的方法及其应用场景。 **6.7 override指示符** 使用`override`指示符来覆盖已定义的变量。 **6.8 多行定义** 如何在Makefile中定义多行变量。 **6.9 系统环境变量** 如何在Makefile中引用系统环境变量。 **6.10 目标指定变量** 针对特定目标定义变量。 **6.11 模式指定变量** 根据模式匹配来定义变量。 #### 七、Makefile的条件执行 这部分介绍了如何在Makefile中实现条件执行逻辑。 **7.1 一个例子** 通过示例展示如何使用条件执行。 **7.2 条件判断的基本语法** Makefile中条件执行的基本语法。 **7.3 标记测试的条件语句** 如何使用条件语句来测试文件或变量的状态。 #### 八、make的内嵌函数 这部分讲解了GNU Make提供的各种内嵌函数及其用途。 **8.1 函数的调用语法** 如何在Makefile中调用函数。 **8.2 文本处理函数** GNU Make提供了一系列文本处理函数,用于处理字符串、列表等。 - **8.2.1 $(substFROM,TO,TEXT)**:用于替换字符串中的子串。 - **8.2.2 $(patsubstPATTERN,REPLACEMENT,TEXT)**:模式替换函数。 - **8.2.3 $(stripSTRINT)**:移除字符串两端的空白字符。 - **8.2.4 $(findstringFIND,IN)**:查找子串。 - **8.2.5 $(filterPATTERN…,TEXT)**:筛选出匹配模式的项。 - **8.2.6 $(filter-outPATTERN,TEXT)**:筛选出不匹配模式的项。 - **8.2.7 $(sortLIST)**:对列表进行排序。 - **8.2.8 $(wordN,TEXT)**:获取列表中的第N个元素。 - **8.2.9 $(wordlistS,E,TEXT)**:获取列表中的第S到E个元素。 - **8.2.10 $(wordsTEXT)**:返回列表中元素的数量。 - **8.2.11 $(firstwordTEXT)**:获取列表中的第一个元素。 以上知识点覆盖了GNU Make工具的核心功能和使用方法,对于Linux程序员来说是非常重要的技能。通过熟练掌握这些内容,可以在项目管理和构建自动化方面大大提高效率。
2025-09-26 10:42:19 1.9MB GUN_make 中文手册
1
《GUN make v3.80中文指南》.pdf 是一份详尽的GNU make手册中文版,由徐海兵翻译,发布于2004年9月11日。这份文档深入介绍了GNU make v3.80版本的功能、用法以及高级特性,是学习和掌握make工具的宝贵资源。下面,我们将根据给定的部分内容,提炼并阐述其中的关键知识点。 ### 关键知识点一:Makefile基础知识与工作原理 #### Makefile简介 Makefile是GNU make的核心,它是一份文本文件,用于定义构建项目所需的目标、依赖关系和命令。Makefile中定义的规则指导make工具如何构建目标文件,包括编译源代码、链接库文件等。 #### 规则介绍 规则是Makefile中的核心组成部分,它们指定了目标文件的生成方法。每个规则通常包括一个目标、其依赖项列表和一系列执行命令。make通过解析这些规则来决定哪些文件需要被重新构建。 #### 示例与工作流程 一个简单的Makefile示例可以是: ``` target: source.o gcc -o target source.o ``` 在这个示例中,“target”是最终生成的目标文件,“source.o”是依赖项,而“gcc -o target source.o”则是构建该目标的命令。 #### 变量指定 在Makefile中,变量用于存储字符串或字符串列表,可以用于简化规则的编写。例如,可以定义一个变量CFLAGS来存储编译器的选项。 #### 自动推导规则 GNU make提供了一组预定义的规则,称为自动推导规则,当make无法找到特定目标的规则时,它会尝试应用这些规则。例如,如果目标是“.o”文件,make将默认尝试使用“cc”编译器来创建它。 #### 清除工作目录过程文件 在Makefile中,可以通过定义名为“clean”的规则来清除中间文件或临时文件,保持工作目录的整洁。 ### 关键知识点二:Makefile结构与管理 #### 内容概述 Makefile可以包含多个部分,如目标、规则、变量定义和条件语句等,这些内容共同构成了构建项目的指令集。 #### 命名与包含 Makefile的命名通常是“Makefile”或“makefile”,但在某些情况下,也可以使用其他名称。此外,make允许在Makefile中包含其他Makefile文件,以便更好地组织大型项目的构建脚本。 #### 特殊变量 GNU make提供了许多预定义的变量,如MAKEFILES和MAKEFILE_LIST,它们可以帮助管理多个Makefile文件之间的依赖关系。 #### 重载与解析 make工具支持重载另一个Makefile文件,并且有一套复杂的解析机制来处理Makefile中的变量、规则和条件语句。 ### 关键知识点三:规则的高级特性 #### 规则语法 规则的语法是Makefile中最基本的元素之一,包括目标、依赖项和命令。正确理解规则语法对于高效地使用make至关重要。 #### 文件名通配符 在Makefile中,可以使用通配符来匹配一组文件名,这在处理大量源文件时非常有用。然而,通配符的使用也有其局限性,需要谨慎处理。 #### 目录搜索 GNU make提供了目录搜索功能,通过设置VPATH变量或使用vpath关键字,可以在多个目录中查找依赖文件。 #### 隐含规则与静态模式 除了自定义规则外,make还支持隐含规则,它们可以自动应用于某些文件类型。静态模式是一种更灵活的规则类型,可以使用通配符和其他模式匹配符来指定目标和依赖。 #### 多目标与多规则 Makefile支持同时指定多个目标和规则,这对于需要构建多个输出文件的项目非常有用。 ### 关键知识点四:命令与执行控制 #### 命令执行与回显 在Makefile中,命令可以包含任何可以在shell环境中运行的指令。make工具支持命令回显,允许用户在执行前查看即将运行的命令。 #### 错误处理与中断 make能够捕获命令执行时的错误,并提供选项来控制遇到错误后的行为,如继续构建其他目标或立即停止整个构建过程。 #### 递归执行与变量 递归调用make是GNU make的一个强大特性,允许在Makefile中调用另一个make进程。变量在递归调用中扮演重要角色,可以传递参数和配置。 ### 关键知识点五:变量与条件执行 #### 变量使用 变量在Makefile中用于存储和传递信息,它们可以定义为递归展开式变量或直接展开式变量,每种类型都有其特定的用途和限制。 #### 条件判断 Makefile支持条件执行,通过条件语句可以根据不同的条件执行不同的规则或命令,增强了Makefile的灵活性和复杂性。 ### 关键知识点六:内嵌函数 #### 函数调用 GNU make提供了多种内嵌函数,用于文本处理、列表操作等,这些函数增强了Makefile的表达能力和自动化程度。 通过以上关键知识点的梳理,我们可以看到,《GUN make v3.80中文指南》不仅是一份简单的教程,而是涵盖了GNU make工具几乎所有方面的详尽指南。无论是初学者还是有经验的开发者,都能从中获得有价值的信息和技巧,帮助他们更有效地管理和构建软件项目。
2025-09-26 10:40:47 1.29MB 《GUN make
1
详细讲解lds script脚本编程,包括官方使用手册,另外附带中文翻译。
2023-04-04 13:23:47 460KB gun linker英文版、中文版
1
对Linux中的编译工具GCC的介绍及使用
2023-03-27 15:59:21 121KB GCC Linux
1
GUN+ld中文使用手册.pdf 非常详细的链接脚本教程
2022-12-12 16:14:59 4.78MB GUN+ld中文使用手册
1
本文比较完整的讲述 GNU make 工具,涵盖 GNU make 的用法、语法。同时重点讨论如何 为一个工程编写 Makefile。作为一个 Linux 程序员, make 工具的使用以及编写 Makefile 是必需 的。系统、详细讲述 make 的中文资料比较少,出于对广大中文 Linuxer 的支持,本人在工作之余, 花了 18 个多月时间完成对“info make”的翻译整理,完成这个中文版的书册。本书并不是一个 语言的翻译版本,其中对 GNU make 的一些语法和用法根据我个人的工作经验进行了一些详细分 析和说明,也加入了一些个人的观点和实践总结。本书的所有的例子都可以在支持V3.8版本的GNU make 的系统中正确执行。
2022-11-09 23:45:15 1.29MB make
1
据说Emacs是神的编辑器,而Vim是编辑器之神。一些人勇敢地拾起了Vim或Emacs,却发现学习曲线陡峭而漫长,整个系列教程会由浅入深的向您介绍 Emacs,这个强大的编辑器的各项功能,使您从对它完全不熟悉到能够完成基本操作,以至于最后成为一个高手。
2022-06-22 20:40:56 13.02MB Emacs 中文
1
GUN C库函数手册,不错的手册支持API查找功能
2022-06-06 20:21:09 2.32MB GUN C
1
GUN.Linux.编程指南(第二版)这本书对于编写linux程序入门挺有用的,推荐
2022-02-06 13:12:41 15.01MB linux编程
1