GNU make中文手册 学习总结摘要

本文主要参考 GNU make中文手册 做一些简单的摘抄总结,原文参见 http://www.yayu.org/book/gnu_make/

第二章:GNU make 介绍

2.5指定变量

objects”作为一个变量,它代表所有的.o文件的列表。在定义了此变量后,我们就可以在需要使用这些.o文件列表的地方使用“$(objects)”来表示它,而不需要罗列所有的.o文件列表。

2.6自动推导原则:

在使用make编译.c源文件时,可以省略编译一个.c文件所使用的命令,即构建规则。另外可以省略依赖规则中的相应源文件。

2.8清除工作目录过程文件

clean :

rm edit $(objects)

在实际应用时,我们会把这个规则写成如下稍微复杂一些的样子。以防止出现始料未及的情况。

.PHONY : clean

clean :

-rm edit $(objects)

第三章: makefile  总述

3.1 makefile的内容

如果此行的第一个非空字符为“#”,那么此行为注释行。注释行的结尾如果存在反斜线(\),那么下一行也被作为注释行。当在Makefile中需要使用字符“#”时,可以使用反斜线加“#”(\#)来实现

变量以及功能的定义将在引用的地方自动展开,类似宏。例如:

  0 define all-cpp-files-under                                                                                                                                           
  1 $(patsubst ./%,%, \
  2   $(shell cd $(LOCAL_PATH) ; \
  3           find $(1) -name "*.cpp" -and -not -name ".*") \
  4  )
  5 endef


  1 #LOCAL_OPPO_SRC_FILES := $(call all-cpp-files-under, ../oppo)

3.2 makefile文件的命名
注释:通过命令指定目标使用make的隐含规则:
当前目录下不存在以“GNUmakefile”、“makefile”、“Makefile”命名的任何文件,
1.  当前目录下存在一个源文件foo.c的,我们可以使用“make foo.o”来使用make的隐含规则自动生成foo.o。当执行“make foo.o”时。我们可以看到其执行的命令为:
cc –c –o foo.o foo.c
之后,foo.o将会被创建或者更新。
2.  如果当前目录下没有foo.c文件时,就是make对.o文件目标的隐含规则中依赖文件不存在。如果使用命令“make foo.o”时,将回到到如下提示:
make: *** No rule to make target ‘foo.o’. Stop.
3.  如果直接使用命令“make”时,得到的提示信息如下:
make: *** No targets specified and no makefile found. Stop.
3.3 包含其他makefile

如果一行以[Tab]字符开始make程序将此行作为一个命令行来处理,一般情况使用空格来代替

使      include FILENAMES...”,make程序处理时,如果“FILENAMES”列表中的任何一个文件不能正常读取而且不存在一个创建此文件的规则时make程序将会提示错误并退出。

使用 “-include FILENAMES...”的情况是,当所包含的文件不存在或者不存在一个规则去创建它,make程序会继续执行,只有在因为makefile的目标的规则不存在时,才会提示致命错误并退出。

疑问:include文件中的变量定义,以及包含的静态库,是否会传导如其他文件中,待Qcom camera hal进行测试验证?

3.4变量MAKEFILES

系统包含的环境变量,不能用作编译目标

3.5变量MAKEFILE_LIST

系统读取的所有makefile文件名,最后一个附带到后面

3.6VARIABLES变量

此引用点之前makefile中所有的全局变量列表

3.8 重载另外一个makefile

#sample GNUmakefile

foo:

frobnicate > foo

%: force

@$(MAKE) -f Makefile $@

force: ;

首先尝试在GNUmakefile中寻找规则,当无法找到规则时再在Makefile中寻找,避免直接include造成多处冲突。此方法有拦截作用

3.9Make如何解析makefile

GUN make的执行过程分为两个阶段。

第一阶段:读取所有的makefile文件(包括“MAKIFILES”变量指定的、指示符“include”指定的、以及命令行选项“-f(--file)”指定的makefile文件),内建所有的变量、明确规则和隐含规则,并建立所有目标和依赖之间的依赖关系结构链表。

在第二阶段:根据第一阶段已经建立的依赖关系结构链表决定哪些目标需要更新,并使用对应的规则来重建这些目标。

规则定义的符号不明白怎么描述的?

3.10总结

make的执行过程如下:

1.        依次读取变量“MAKEFILES”定义的makefile文件列表

2.        读取工作目录下的makefile文件(根据命名的查找顺序“GNUmakefile”,“makefile”,“Makefile”,首先找到那个就读取那个)

3.        依次读取工作目录makefile文件中使用指示符“include”包含的文件

4.        查找重建所有已读取的makefile文件的规则(如果存在一个目标是当前读取的某一个makefile文件,则执行此规则重建此makefile文件,完成以后从第一步开始重新执行)

5.        初始化变量值并展开那些需要立即展开的变量和函数并根据预设条件确定执行分支

6.        根据“终极目标”以及其他目标的依赖关系建立依赖关系链表

7.        执行除“终极目标”以外的所有的目标的规则(规则中如果依赖文件中任一个文件的时间戳比目标文件新,则使用规则所定义的命令重建目标文件)

8.        执行“终极目标”所在的规则

第四章: makefile  规则  

4.2规则语法

规则的中心思想就是:目标文件的内容是由依赖文件文件决定,依赖文件的任何一处改动,将导致目前已经存在的目标文件的内容过期。规则的命令为重建目标提供了方法。这些命令运行在系统shell之上

4.3依赖的类型

我们需要对依赖进行分类,一类是这些依赖文件的更新需要对应更新目标文件,另一类是这些依赖的更新不会导致目标被重建。第二类的依赖我们就称他为:“order-only”依赖。在书写规则时,“order-only”依赖使用管道符号“|”开始,作为目标的一个依赖文件。规则的依赖列表中管道符号“|”左边的是常规依赖文件,所有出现在管道符号右边的就是“order-only”依赖。规则依赖文件中如果一个文件被同时声明为常规依赖和“order-only”依赖,那么此文件被作为常规依赖处理


4.4文件名使用通配符

Makefile中统配符可以出现在以下两种场合:

1.        可以用在规则的目标、依赖中,此时make会自动将其展开;

2.        可出现在规则的命令中,其展开是在shell在执行此命令时完成。

转移字符可以用\来引用

变量定义中使用的通配符不会被展开

函数wildcard

4.5目录搜索

4.5.1一般性搜索

4.5.3目录搜索机制

当两个目录都不存在目标文件“libtest.a”时,目标将会在当前目录(“prom”目录)下创建。如果“src”目录下已经存在目标文件“libtest.a”。当其依赖文件任何一个被改变以后执行make,目标“libtest.a”将会被在“src”目录下被更新

4.5.4命令行和搜索目录

规则命令行中的自动化变量“$^”代表所有的是的通过目录搜索得到的依赖文件的完整路径名(目录+一般文件名)列表。“$@”代表规则的目标

自动化变量“$<”代表规则中通过目录搜索得到的依赖文件列表的第一个依赖文件

4.5.5隐含规则和搜索目录

4.6 makefile伪目标

伪目标也称为标签,使用伪目标有两点原因:1. 避免在我们的Makefile中定义的只执行命令的的目标(此目标的目的为了执行执行一些列命令,而不需要创建这个目标)和工作目录下的实际文件出现名字冲突。2. 提高执行make时的效率,特别是对于一个大型的工程来说,编译的效率也许你同样关心

.PHONY: clean

clean:

rm *.o temp

make内嵌隐含变量???

4.7强制目标(没有命令或依赖的规则)

clean: FORCE

rm $(objects)

FORCE:

force无命令和依赖,所以总被认为是最新的。所以规则命令总会执行

在使用GNU make,尽量避免使用这种方式。在GNU make中我们推荐使用伪目标方式

4.8空目标文件

一个空目标文件应该存在一个或者多个依赖文件。将这个目标作为终极目标,在它所依赖的文件比它新时,此目标所在规则的命令行将被执行。就是说,如果空目标的依赖文件被改变之后,空目标所在规则中定义的命令会被执行.

print: foo.c bar.c

     lpr -p $?

     touch print

4.9 Makefile的特殊目标

4.10多目标

仅需要一个描述依赖关系的规则,而不需要在规则中定义命令

对于多个具有类似重建命令的目标。重建这些目标的命令并不需要是绝对相同,因为我们可以在命令行中使用make的自动环变量“$@”来引用具体一个目标,并完成对它的重建

4.11多规则的目标

Makefile中,一个文件可以作为多个规则的目标出现。这种情况时,此目标文件的所有依赖文件将会被合并成此目标一个依赖文件列表,其中任何一个依赖文件比目标更新(比较目标文件和依赖文件的时间戳)时,make将会执行特定的命令来重建这个目标。

对于一个多规则的目标,重建此目标的命令只能出现在一个规则中(可以是多条命令)。如果多个规则同时给出重建此目标的命令,make将使用最后一个规则所以的命令

静态模式规则是这样一个规则:规则存在多个目标,并且不同的目标可以根据目标文件的名字来自动构造出依赖文件。静态模式规则比多目标规则更通用,它不需要多个目标具有相同的依赖。但是静态模式规则中的依赖文件必须是相类似的而不是完全相同的

4.13双冒号规则

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GNU make is the most widely used build automation tool, but it can be challenging to master and its terse language can be tough to parse for even experienced programmers. Those who run into difficulties face a long, involved struggle, often leaving unsolved problems behind and GNU make's vast potential untapped. The GNU Make Book demystifies GNU make and shows you how to use its best features. You'll find a fast, thorough rundown of the basics of variables, rules, targets, and makefiles. Learn how to fix wastefully long build times and other common problems, and gain insight into more advanced capabilities, such as complex pattern rules. With this utterly pragmatic manual and cookbook, you'll make rapid progress toward becoming a more effective user. You'll also learn how to: Master user-defined functions, variables, and path handling Weigh the pitfalls and advantages of GNU make parallelization Handle automatic dependency generation, rebuilding, and non-recursive make Modify the GNU make source and take advantage of the GNU Make Standard Library Create makefile assertions and debug makefiles GNU make is known for being tricky to use, but it doesn't have to be. If you're looking for a deeper understanding of this indispensable tool, you'll find The GNU Make Book to be an indispensable guide. Table of Contents Chapter 1. The Basics Revisited Chapter 2. Makefile Debugging Chapter 3. Building and Rebuilding Chapter 4. Pitfalls and Problems Chapter 5. Pushing the Envelope Chapter 6. The GNU Make Standard Library
GNU make is the most widely used build automation tool, but it can be challenging to master and its terse language can be tough to parse for even experienced programmers. Those who run into difficulties face a long, involved struggle, often leaving unsolved problems behind and GNU make's vast potential untapped. The GNU Make Book demystifies GNU make and shows you how to use its best features. You'll find a fast, thorough rundown of the basics of variables, rules, targets, and makefiles. Learn how to fix wastefully long build times and other common problems, and gain insight into more advanced capabilities, such as complex pattern rules. With this utterly pragmatic manual and cookbook, you'll make rapid progress toward becoming a more effective user. You'll also learn how to: Master user-defined functions, variables, and path handling Weigh the pitfalls and advantages of GNU make parallelization Handle automatic dependency generation, rebuilding, and non-recursive make Modify the GNU make source and take advantage of the GNU Make Standard Library Create makefile assertions and debug makefiles GNU make is known for being tricky to use, but it doesn't have to be. If you're looking for a deeper understanding of this indispensable tool, you'll find The GNU Make Book to be an indispensable guide. Table of Contents Chapter 1. The Basics Revisited Chapter 2. Makefile Debugging Chapter 3. Building and Rebuilding Chapter 4. Pitfalls and Problems Chapter 5. Pushing the Envelope Chapter 6. The GNU Make Standard Library
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
### 回答1: 《GNU Make手册中文版是一本详细介绍GNU Make工具的技术文档。GNU Make是一个自动化构建工具,主要用于管理软件项目中的编译和构建过程。手册中详细解释了GNU Make的基本概念、用法和高级功能,对于软件开发人员和系统管理员来说是一个非常有用的参考。 手册中文版包括以下内容: 1. 简介:介绍了GNU Make的背景和基本概念,包括Makefile、目标、依赖关系和规则等。 2. Makefile语法:详细介绍了Makefile文件的语法结构,包括目标、依赖关系、命令和变量等的使用方法。 3. 变量和函数:讲解了GNU Make中的变量和函数的定义和使用方法,包括内置变量和函数以及自定义变量和函数。 4. 规则和模式:介绍了规则的定义和匹配模式的使用,包括显式规则、隐含规则和模式规则等。 5. 高级功能:详细讨论了GNU Make的高级功能,如多目标规则、条件语句、循环、宏定义等。 6. 常见问题解答:提供了一些常见问题的解答和解决方案,以帮助用户更好地理解和使用GNU Make手册以清晰简洁的语言和例子来解释GNU Make的各个概念和用法,使读者能够迅速上手并实践。此外,手册还提供了丰富的示例和案例,帮助读者更好地理解和应用GNU Make工具。 总的来说,《GNU Make手册中文版是一本权威的技术文档,对于希望深入理解和使用GNU Make的开发人员和系统管理员来说,是一个必备的参考资料。无论是初学者还是有经验的用户,都可以从中获得有关GNU Make的全面指导和实用建议。 ### 回答2: 《GNU Make》是一个用于自动化构建和管理项目的工具,它是GNU计划的一部分。它的手册提供了详细的说明和指导,帮助用户了解和使用Make工具。 手册中首先介绍了Make的基本概念和原理,包括源文件、目标文件、依赖关系以及规则。它解释了如何编写Makefile文件,这是Make工具的配置文件,用于描述项目的构建过程和依赖关系。手册中提供了大量的示例和模板,帮助用户快速上手和理解Makefile的语法和用法。 手册还介绍了Make的常用命令和选项,例如clean、install等命令,以及 -f、-n等选项。这些命令和选项可以帮助用户执行特定的任务或调整Make的行为。手册详细解释了每个命令和选项的作用和用法,并提供了示例和建议。 除了基本概念和命令,手册还介绍了Make的高级特性和技巧,例如多目标、模式规则、变量和函数的使用等。它详细讲解了如何利用这些特性来优化构建过程、简化Makefile的编写和提高构建效率。手册中的示例和实践经验对读者非常有帮助。 总的来说,《GNU Make手册是一本详细而全面的指南,适合初学者和有一定经验的用户阅读和参考。它具有明确的结构和清晰的语言,帮助用户理解和掌握Make工具的使用。无论是进行简单的项目构建还是复杂的自动化流程,都可以借助这本手册充分发挥Make的威力。 ### 回答3: 《GNU Make》是一本非常重要的软件开发工具手册,也是一个非常强大的构建自动化工具。它的中文手册可以帮助读者全面了解和掌握这一工具的使用方法和技巧。 该手册首先介绍了GNU Make的背景和基本概念,包括Makefile的编写规则和文件格式。它详细解释了如何使用Makefile来描述和管理软件项目的构建过程,包括编译、链接、测试等各个阶段。它还介绍了一些常用命令和选项,帮助读者更好地理解和使用Make工具。 在手册的后半部分,它提供了一些高级的技术和技巧,如条件判断、循环、变量和函数的使用等。这些内容可以帮助读者更加灵活地定制和优化项目的构建过程,提高开发效率。此外,手册还提供了一些实用的示例和案例分析,帮助读者更好地应用和理解所学的知识。 总的来说,《GNU Make手册中文版是一本非常实用和权威的参考资料。无论是初学者还是有一定经验的开发人员,都可以从中获得很多有益的知识和经验。它可以帮助读者更好地理解和掌握GNU Make工具的使用方法,提高软件开发的效率和质量。尽管手册篇幅较长,但它的内容有条理、易于理解。无论是作为入门学习资料还是作为日常参考手册,都是非常值得推荐的一本书。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值