GNU Make中文手册(一)

本文介绍了GNUMake的基本概念,包括Makefile的编写方法、规则定义、变量使用及隐含规则等,适合初学者快速掌握Make工具。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GNU Make

翻译loverszhaokai

最新版文档请参考github

https://github.com/loverszhaokai/GNUMakeManual_CN

欢迎大家提出修改意见!谢谢!自由加油!

 

原文https://www.gnu.org/software/make/manual/

 

参考

1.     徐海兵 http://www.yayu.org/book/gnu_make/

2.      陈皓   http://blog.youkuaiyun.com/haoel/article/details/2886

 

关于本手册的声明

本文瑾献给所有热爱Linux的程序员!本文档版权所有,禁止用于任何商业行为。(向徐海兵致敬!)

 

1      make概览

  在一个庞大的程序中,make命令自动决定了哪些文件需要重新编译,和重新编译它们的步骤。本手册介绍GNU make,它是由Richard StallmanRoland McGrath实现的。开发工作从3.76版就由Paul D.Smith接手了。  GNU make遵循IEEE 标准1003.2-1992(POSIX.2)的第6.2章。

  我们的示例采用的是C语言程序,因为程序语言基本都相似,凡是能够在shell执行编译的程序设计语言,都可以使用make。实际上,make不局限于程序。你可以使用make来描述任何任务,只要该任务满足一下规则,当文件A依赖的文件BCD…变化时,文件A就需要被更新。

  在使用make之前,你需要编写一个文件名为makefile的文件,这个makefile文件负责描述程序中文件间的关系,并且提供更新文件所需要的命令。很明显的,在一个程序中,object文件的更新需要很多源文件,可执行文件的更新需要使用很多object文件。

  一旦存在一个适当的makefile文件,每一次你改变源文件,只需要在shell输入make就可以重新编译整个程序:

  # make

  make通过使用makefile中文件的关系以及文件最近修改时间来决定是否需要更新。对于每一个需要更新的文件,都会执行makefile中对应的命令。

  你也可以通过命令行参数指定重新编译哪些文件,或者如何编译。参考第9[如何执行make],99页。

1.1    如何阅读该手册

  如果你是make新手,或者你正在寻找一个综合的介绍,那么你可以阅读每一章的前面几个小节,略过其余小节。在每一章,前几节包括简介和综合信息,后几节包括专用的信息。第2[Makefile简介],第3页是例外,该章全都是简介。

  如果你熟悉其他make工具,请看第13[GNU make特性],第143页,这一章列举了GNU make的加强,还有第14[不兼容点和不支持的特性],第147页,

  这一章说明了仅有的一些GNU make不支持但其它make工具支持的特性。

     快速总结,请看第9.7[选项总览],第104页,附录A[快速索引],第165页,第4.8[特殊目标],第32页。

1.2     问题和Bugs

  对于GNU make,如何你有问题或你认为你发现一个bug,请把它提交给开发人员;我们不能保证解决你提出的问题或bug,但是我们会竭尽全力。

     提交bug前,请确定你确实发现了一个bug。仔细地阅读文档,查看你是否能这样做。如果你还不确定是否可以这样做,请提交给我们,因为这是文档的bug

     在你提交bug或尝试自己修复之前,尽可能的分离出最小的makefile文件,该文件可以重现bug。然后将该makefilemake的结果发送给我们,包括任何错误信息和警告信息。请不要改变这些信息:最好是通过剪切和黏贴的方式。在分离出最小的makefile文件的过程中,请不要使用任务收费的或者不正常的工具:你总是可以使用shell命令来完成相同的功能的。最后,请解释清楚你预期的效果,这将是我们确定这个问题是否已经出现在文档中。

     一旦你有一个明确的问题,你可以通过以下途径提交。发送电子邮件到:

              bug-make@gnu.org

  或者使用基于浏览器的项目管理工具:

              http://savannah.gnu.org/projects/make/

  除了上面这些信息,请指明你所使用的make的版本号,你可以使用’make --version’命令来获得。还有,你使用的机器的型号以及操作系统的信息。通过’make --help’的最后一行,你可以获得操作系统的信息。

2       Makefile简介

  你需要一个名字是”makefile”的文件来指定make如何工作。通常makefile指定make如何编译和链接一个程序。

      在这一章中,我们将会讨论一个简单的makefile文件如何编译和链接edit工程,该工程包含8C语言源文件和3个头文件。makefile还可以指定make如何执行各种各样的命令(例如,make clean,执行删除指定文件的操作)。这里有makefile更复杂的示例,请看附录C[复杂的Makefile],第177页。

      make重新编译edit,每一个改变过的C语言源文件都必须重新编译。为了安全,如果头文件发生改变,每一个包含该头文件的C语言源文件必须重新编译。每一次编译,都会产生与源文件关联的object文件。最后,只要任何一个object文件被重新编译了,所有的object文件不管是否是新的还是旧的,都必须被重新链接,以生成新的执行文件edit

2.1   Makefile规则

  一个简单的makefile包含如下规则:

       target … : prerequisites …
              recipe
              …
              …

        一个target通常是指程序生成的文件的名字;targets可以是执行文件的名字或者object文件的名字。target还可以是动作的名字,例如’clean’(请看第4.5节)[伪造的target],第29页)。

       prerequisites是指用来生成target的一些文件,一个target通常依赖一些文件。

       recipe是指一个操作,该操作由make来执行。一个recipe可能含有多个命令,这些命令可以都在同一行,也可以各自独立一行。请注意:recipe的每一行开头都要有tab键!这是为了防止有人粗心大意。如果你仍坚持在recipes前面加入除tab外的字符,你可以设置.RECIPEPREFIX变量为你想要的字符。(请看第6.14[特殊变量],第73页)。

       通常,如果prerequisites发生变化,那么make就会执行对应的recipe以重新生成target。但是,target可以没有prerequisites,例如target ’clean’就没有prerequisites

       一个规则指明了如何以及何时重新编译确定的targetmake通过对prerequisites执行recipe来生成或者更新target。一个规则还可以指明如何以及何时执行一个操作。请看第4[编写规则],第21页。

       一个makefile可能包含除了规则的其他信息,但是一个简单的makefile仅仅只需要包含规则。规则可能看起来比这个模板的复杂,但是这些规则都多少遵循这种形式。

2.2    一个简单的Makefile

  这是一个简单的makefile,它描述了执行文件edit依赖的8object文件,转而,依赖于8C语言源文件和3个头文件。

      在这个示例中,所有的C语言源文件都包含defs.h’,但是只有定义了编辑命令的文件包含’command.h’,只有改变编辑器的文件包含’buffer.h’

edit: main.o kbd.o command.o display.o \
              insert.o search.o files.o utils.o
              cc -o edit main.o kbd.o command.o display.o \
              insert.o search.o files.o utils.o

main.o: main.c defs.h
       cc -c main.c

kbd.o: kbd.c defs.h command.h
       cc -c kbd.c

command.o: command.c defs.h command.h
       cc -c command.c

display.o: display.c defs.h buffer.h
       cc -c display.c

insert.o: insert.c defs.h buffer.h
       cc -c insert.c
 
search.o: search.c defs.h buffer.h
       cc -c search.c

files.o: files.c defs.h buffer.h command.h
       cc -c files.c

 
utils.o: utils.c defs.h
       cc -c utils.c

clean:
       rm edit main.o kbd.o command.o display.o \
       insert.o search.o files.o utils.o

  我们使用反斜杠’\’将一行分割成两行,这就像是一行一样,但是更利于阅读。请看第3.11[分割长行]12页。

  使用该makefile创建名为edit的执行文件,输入:

       # make

  使用该makefile删除执行文件和所有的object文件,输入:

       # make clean

  在makefile示例中,targets包括执行文件’edit’,和object文件’main.o’, ‘kbd.o’prerequisites包括文件’main.c’, ‘defs.h’。事实上,每一个’.o’文件既是target又是prerequisiterecipes包括’cc –c main.c’’cc –c kbd.c’

       target是一个文件,如果对应的任何一个prerequisites发生变化,target都需要被重新编译或链接。另外,任何本身是自动生成的prerequisites都应该先被更新。在这个示例中,’edit’依赖这8个源文件中的每一个;’main.o’依赖于源文件’main.c’和头文件’defs.h’

       recipe可能在包含targetprerequisites的每一行之后出现。它描述了如何更新target。一个tab字符(或者其他由.RECIPEPREFIX定义的字符)必须出现在recipe每行的开头,这样做是为了区分recipemakefile文件中的其它行。(铭记于心,make根本不知道recipes是如何工作的。它取决于你提供的能够更新target文件的recipesmake所做的只是在target文件需要被更新的时候,去执行你描述的recipe。)

       target ‘cean’ 并不是一个文件,它只是一个操作的名字。正常情况下,因为你不会去执行这个规则中的操作,所以’clean’不是任何其它规则的prerequisite。因此,除非你指定make去执行’clean’,否则’clean’永远不会被自动执行。注意:这个规则不仅不是其它targetprerequisite,而且它自己也没有任何prerequisites,所以这个规则的唯一目的就是执行recipes。类似这样的没有涉及prerequisites,并且只有recipestargets称为假的targets。具体信息请看第4.5[假的targets],第29页。如何是make忽略rm或其它命令引起的错误,请看第5.5[recipes中的错误],第49页。

2.3     make如何处理Makefile文件

  默认情况下,make从第一个target(不会是以’.’开头的targets)开始执行。我们称第一个target默认目标(目标是指那些make最终努力去更新的targets。你可以通过命令行参数(请看第9.2[指定目标的参数],第99页)或者设置.DEFAULT_GOAL具体值(请看第6.14[其他具体变量],第73页),来重写这个行为)。

     在上一节的简单示例中,默认的目标就是更新执行文件’edit’;因此,我们把这个规则放在第一行。

     因此,当你输入命令:

              # make

   make读取当前目录下的makefile文件,开始处理第一个规则。在示例中,这个规则就是重新链接’edit’;但是在make完全处理这个规则之前,make必须先处理’edit’依赖的object文件的规则。这些object文件中的每一个都需要按照自己的规则进行处理。这些规则指明每一个’.o’文件都需要编译它的源文件。出现如下情况必须重新编译,存在任何一个prerequisites的文件修改时间比object文件新,或者object文件不存在。

  其它规则会被处理因为它们的targets作为目标的prerequisites。如果一些规则没有被目标依赖(或者任何目标依赖的文件等),那么这些规则不会被处理,除非你指定make去这样做(例如,make clean)。

     在重新编译object文件之前,make会考虑更新它的prerequisites,也就是源文件和头文件。这个makefile中没有指明为源文件和头文件做任何事情,因为’.c’’.h’文件不是任何规则的targets,所以make不会为这些文件做任何事情。但是make可以通过规则更新由Bison或者Yacc自动生成的C语言程序。

     在重新编译需要的object文件之后,make决定是否重新链接’edit’。如下情况下就需要重新链接,存在任何一个修改时间比’edit’新的object文件,或者’edit’不存在。如果一个object文件刚被重新编译,那么它就比’edit’新,所以’edit’就会被重新链接。

     因此,如果我们改变’insert.c’,并且执行makemake则会编译’insert.c’以更新’insert.o’,然后链接生成’edit’。如果我们改变’command.h’并且执行makemake则会重新编译’kbd.o’, ’command.o’, ’files.o’,然后链接生成’edit’

2.4     变量使Makefiles更简单

  在我们的示例中,我们不得不在’eidt’的规则中两次列举所有的object文件:

edit: main.o kbd.o command.o display.o \
              insert.o search.o files.o utils.o
              cc -o edit main.o kbd.o command.o display.o \
              insert.o search.o files.o utils.o

  这样的副本是易于出错的;如果一个新的文件被添加到系统中,我们就要把它添加到其中一个序列中,很可能会忘记添加到另一个序列中。我们可以通过使用variables去除这种风险,并且简化makefilevariables允许一个文本字符串被定义一次,并在之后的多个地方使用(请看第6[如何使用variables],第59)。

  这是一个惯例在每一个makefile文件中含有一个variable名为objects, OBJECTS, objs, OBJS, obj, 或者 OBJ,以上这些全都是object文件的名字。我们可以在makefile中定义一个这样的variable objects

 objects = main.o kbd.o command.o display.o \
              insert.o search.o files.o utils.o

  然后,每一个我们想使用object文件名字序列的地方,都可以用variable来替换,只要写’$(objects)’ 请看第6[如何使用variables],第59页)。

     下面是用变量替换后的makefile文件:

objects = main.o kbd.o command.o display.o \

       insert.o search.o files.o utils.o

 

edit: $(objects)
       cc -o edit $(objects)

main.o: main.c defs.h
       cc -c main.c

kbd.o: kbd.c defs.h command.h
       cc -c kbd.c

command.o: command.c defs.h command.h
       cc -c command.c

display.o: display.c defs.h buffer.h
       cc -c display.c

insert.o: insert.c defs.h buffer.h
       cc -c insert.c

search.o: search.c defs.h buffer.c
       cc -c search.c

files.o: files.c defs.h buffer.h command.h
       cc -c files.c

utils.o: utils.c defs.h
       cc -c utils.c


clean:
       rm edit $(objects)

2.5     make来推断recipes

  不一定要为单个的C语言源文件编写recipes来编译它,因为make可以进行如下推断:它有隐含规则指明通过相关联的’.c’文件,使用’cc -c’命令,来更新一个’.o’文件。例如,make使用’cc –c main.c –o main.o’ 命令来将’main.c’ 编译成’main.o’文件。因此,我们可以省略在object文件的规则中省略recipes。请看第10[使用隐含规则],第111页。

      如果一个’.c’文件使用隐含规则的时候,该’.c’文件还会自动地加入到prerequisites中,因此当我们不写recipes时,可以在prerequisites中省略’.c’文件。

      下面是全部的示例,包括以上的所有改变:

objects = main.o kbd.o command.o display.o \
       insert.o search.o files.o utils.o

edit: $(objects)
       cc -o edit $(objects)

main.o: defs.h
kbd.o: defs.h command.h
command.o: defs.h command.h
display.o: defs.h buffer.h
insert.o: defs.h buffer.h
search.o: defs.h buffer.h
files.o: defs.h buffer.h command.h
utils.o: defs.h

.PHONY: clean

clean:
       rm edit $(objects)

  以上就是我们实践中编写的makefile(关于’clean’的描述请看第4.5[假的targets],第29页和第5.5[recipes中的错误],第49页。)

     因为隐含规则如此方便,所以这些规则很重要。你将会经常看到它们的应用。

2.6Makefile的另一种样式

  当使用隐含规则创建object文件的时候,你就可以使用makefile的另一种样式。这种样式的makefile,你可以按照prerequisites进行分组而不是targets。下面是这种样式的makefile

objects = main.o kbd.o command.o display.o \
              insert.o search.o files.o utils.o

edit: $(objects)
       cc -o edit $(objects)

$(objects): defs.h
kbd.o command.o files.o: command.h
display.o insert.o search.o files.o: buffer.h

.PHONY: clean

clean:
       rm edit $(objects)

  上面的makefile中,’defs.h’是所有object文件的prerequisite’command.h’’buffer.h’是部分object文件的prerequisite

     这种风格的makefile是否更好取决于个人的偏好:它看起来更紧凑,但是一些人不喜欢它,因为他们觉得把每个target的信息单独放在一起看起来更清晰。

2.7     清除目录的规则

  你编写规则可能不仅是想编译程序。Mafile通常可以完成除编译程序外的一些事情:例如,如何删除所有的object文件和执行文件,以使目录变得干净。

     这里我们编写一个规则来清空我们示例中edit工程:

clean:
              rm edit $(objects)

      实际中,我们可能想要编写更复杂的规则来处理意料之外的情况。我们可以这样写:

.PHONY: clean
clean:
              rm edit $(objects)

  通过.PHONY可以避免当前目录存在名为’clean’的文件带来的混淆,并且忽略rm的错误继续执行。(请看第4.5[假的targets],第29页和第5.5[recipes中的错误],第49页。)

一个类似clean的规则不能放在makefile的开头,因为我们不想让这个规则默认执行。因此,就像示例中的makefile,我们想让重新编译editor的规则仍然为默认目标。

     因为clean并不是editprerequisite,所以只要我们提供make命令行参数,这个规则永远都不会执行。为了执行这个规则,我们需要输入’make clean’。请看第9[如何执行make],第99页。

转载于:https://www.cnblogs.com/lovers/p/make.html

GUN make 中文手册 译者:徐海兵 2004-09-11 3.5.6 库文件和搜索目录 .................................................................................................... 36 3.6 Makefile伪目标.............................................................................................................. 37 3.7 强制目标(没有命令或依赖的规则) ............................................................................. 40 3.8 空目标文件..................................................................................................................... 41 3.9 Makefile的特殊目标....................................................................................................... 41 3.10 多目标............................................................................................................................ 44 3.11 多规则目标..................................................................................................................... 44 3.12 静态模式 ........................................................................................................................ 45 3.12.1 静态模式规则的语法 ....................................................................................... 45 3.12.2 静态模式和隐含规则 ....................................................................................... 47 3.13 双冒号规则..................................................................................................................... 48 3.14 自动产生依赖 ................................................................................................................. 49 第四章:规则的命令 .................................................................................................................. 51 4 规则中书写命令 ................................................................................................................... 51 4.1 命令回显 ........................................................................................................................ 51 4.2 命令的执行..................................................................................................................... 52 4.3 并发执行命令 ................................................................................................................. 53 4.4 命令执行的错误.............................................................................................................. 54 4.5 中断make的执行............................................................................................................ 56 4.6 make的递归执行............................................................................................................ 56 4.6.1 变量MAKE ............................................................................................................... 57 4.6.2 变量和递归 ............................................................................................................... 58 4.6.3 命令行选项和递归 .................................................................................................... 61 4.6.4 -w选项...................................................................................................................... 63 4.7 定义命令包..................................................................................................................... 63 4.8 空命令............................................................................................................................ 65 第五章:Makefile中的变量......................................................................................................... 65 5 使用变量 .............................................................................................................................. 65 5.1 变量的引用..................................................................................................................... 66 5.2 两种变量定义(赋值)................................................................................................... 68 5.2.1 递归展开式变量........................................................................................................ 68 5.2.2 直接展开式变量........................................................................................................ 69 5.2.3 如何定义个空格 .................................................................................................... 70 5.2.4 “?=”操作符 ............................................................................................................. 71 5.3 变量的高级用法.............................................................................................................. 71 5.3.1 变量的替换引用........................................................................................................ 72 5.3.2 变量的套嵌引用........................................................................................................ 72 5.4 变量取值 ........................................................................................................................ 76 5.5 如何设置变量 ................................................................................................................. 76 5.6 追加变量值..................................................................................................................... 77 5.7 override 指示符 ............................................................................................................. 79 5.8 多行定义 ........................................................................................................................ 80 5.9 系统环境变量 ................................................................................................................. 81 5.10 目标指定变量 ................................................................................................................. 83 5.11 模式指定变量 ................................................................................................................. 84 第六章:Makefile的条件执行 ..................................................................................................... 85 6 Makefile的条件判断 ............................................................................................................. 85 6.1 个例子 ........................................................................................................................ 85 6.2 条件判断的基本语法 ...................................................................................................... 86 2004年9月11日 3GUN make 中文手册 6.3 标记测试的条件语句 ...................................................................................................... 89 第七章:make的内嵌函数.......................................................................................................... 89 7 make的函数 ......................................................................................................................... 89 7.1 函数的调用语法.............................................................................................................. 90 7.2 文本处理函数 ................................................................................................................. 91 7.2.1 $(subst FROM,TO,TEXT) ....................................................................................... 91 7.2.2 $(patsubst PATTERN,REPLACEMENT,TEXT) ..................................................... 91 7.2.3 $(strip STRINT)....................................................................................................... 92 7.2.4 $(findstring FIND,IN) .............................................................................................. 92 7.2.5 $(filter PATTERN...,TEXT) ..................................................................................... 93 7.2.6 $(filter-out PATTERN...,TEXT) ............................................................................... 93 7.2.7 $(sort LIST) ............................................................................................................. 94 7.2.8 $(word N,TEXT) ...................................................................................................... 94 7.2.9 $(wordlist S,E,TEXT).............................................................................................. 94 7.2.10 $(words TEXT) .............................................................................................. 94 7.2.11 $(firstword NAMES...) .................................................................................. 95 7.3 文件名处理函数.............................................................................................................. 95 7.3.1 $(dir NAMES...) ...................................................................................................... 95 7.3.2 $(notdir NAMES...)................................................................................................. 96 7.3.3 $(suffix NAMES...) ................................................................................................. 96 7.3.4 $(basename NAMES...) ......................................................................................... 96 7.3.5 $(addsuffix SUFFIX,NAMES...) ............................................................................. 97 7.3.6 $(addprefix PREFIX,NAMES...) ............................................................................. 97 7.3.7 $(join LIST1,LIST2)................................................................................................. 98 7.3.8 $(wildcard PATTERN) ............................................................................................ 98 7.4 foreach 函数................................................................................................................. 98 7.5 if 函数 ......................................................................................................................... 100 7.6 call函数 ....................................................................................................................... 100 7.7 value函数 .................................................................................................................... 102 7.8 eval函数 ...................................................................................................................... 103 7.9 origin函数 ................................................................................................................... 104 7.10 shell函数 ..................................................................................................................... 106 7.11 make的控制函数.......................................................................................................... 106 7.11.1 $(error TEXT...) ........................................................................................... 107 7.11.2 $(warning TEXT...)...................................................................................... 107 第八章:执行make .................................................................................................................. 108 8 执行make .......................................................................................................................... 108 8.1 指定makefile文件 ........................................................................................................ 108 8.2 指定终极目标 ............................................................................................................... 109 8.3 替代命令的执行............................................................................................................ 111 8.4 防止特定文件重建 ........................................................................................................ 112 8.5 替换变量定义 ............................................................................................................... 113 8.6 使用make进行编译测试............................................................................................... 114 8.7 make的命令行选项 ...................................................................................................... 115 第九章:make的隐含规则........................................................................................................ 119 9 使用隐含规则 ..................................................................................................................... 119 9.1 隐含规则的使用............................................................................................................ 119 9.2 make的隐含规则览 .................................................................................................. 121 9.3 隐含变量 ...................................................................................................................... 124 9.3.1 代表命令的变量...................................................................................................... 124 9.3.2 命令参数的变量...................................................................................................... 125 9.4 make隐含规则链.......................................................................................................... 126 2004年9月11日 4GUN make 中文手册 9.5 模式规则 ...................................................................................................................... 128 9.5.1 模式规则介绍 ......................................................................................................... 128 9.5.2 模式规则示例 ......................................................................................................... 129 9.5.3 自动化变量 ............................................................................................................. 130 9.5.4 模式的匹配 ............................................................................................................. 133 9.5.5 万用规则 ................................................................................................................ 133 9.5.6 重建内嵌隐含规则 .................................................................................................. 134 9.6 缺省规则 ...................................................................................................................... 135 9.7 后缀规则 ...................................................................................................................... 135 9.8 隐含规则搜索算法 ........................................................................................................ 137 第十章:使用make更新静态库文件 ......................................................................................... 138 10 更新静态库文件............................................................................................................ 138 10.1 库成员作为目标............................................................................................................ 138 ARCHIVE(MEMBER) .............................................................................................................. 138 10.2 静态库的更新 ............................................................................................................... 139 10.2.1 更新静态库的符号索引表 .............................................................................. 140 10.3 make静态库的注意事项............................................................................................... 141 10.4 静态库的后缀规则 ........................................................................................................ 141 第十章 : GNU make的特点............................................................................................... 142 11 GNU make些特点 ................................................................................................. 142 11.1 源自System v的特点 ................................................................................................... 142 11.2 源自其他版本的特点 .................................................................................................... 143 11.3 GNU make自身的特点 ................................................................................................. 143 第十二章 和其它版本的兼容 .................................................................................................... 144 12 不兼容性 ...................................................................................................................... 144 第十三章 Makefile的约定 ........................................................................................................ 146 13 书写约定 ...................................................................................................................... 146 13.1 基本的约定................................................................................................................... 146 13.2 规则命令行的约定 ........................................................................................................ 147 13.3 代表命令变量 ............................................................................................................... 149 13.4 安装目录变量 ............................................................................................................... 150 13.5 Makefile的标准目标名 ................................................................................................. 154 13.6 安装命令分类 ............................................................................................................... 159 第十四章 make的常见错误信息............................................................................................... 161 14 make产生的错误信息 .......................................................................................................... 161 附录1:关键字索引................................................................................................................. 163 GNU make可识别的指示符:.............................................................................................. 163 GNU make函数: ............................................................................................................... 164 GNU make的自动化变量..................................................................................................... 165 GNU make环境变量 ............................................................................................................ 166 后序 ......................................................................................................................................... 166
GNU MAKE的详细中文手册,目录如下: 目 录 第章:概述 1.1 概述 1.2 准备知识 第二章:GNU make 介绍 2.1 Makefile简介 2.2 Makefile规则介绍 2.3 简单的示例 2.4 make如何工作 2.5 指定变量 2.6 自动推导规则 2.7 另类风格的makefile 2.8 清除工作目录过程文件 第三章:Makefile 总述 3.1 Makefile的内容 3.2 makefile文件的命名 3.3 包含其它makefile文件 3.4 变量 MAKEFILES 3.5 变量 MAKEFILE_LIST 3.6 其他特殊变量 3.7 makefile文件的重建 3.8 重载另外makefile 3.9 make如何解析makefile文件 3.9.1 变量取值 3.9.2 条件语句 3.9.3 规则的定义 3.10 总结 第四章:Makefile的规则 4.1 个例子 4.2 规则语法 4.3 依赖的类型 4.4 文件名使用通配符 4.4.1 统配符使用举例 4.4.2 通配符存在的缺陷 4.4.3 函数wildcard 4.5 目录搜寻 4.5.1 般搜索(变量VPATH) 4.5.2 选择性搜索(关键字vpath) 4.5.3 目录搜索的机制 4.5.4 命令行和搜索目录 4.5.5 隐含规则和搜索目录 4.5.6 库文件和搜索目录 4.6 Makefile伪目标 4.7 强制目标(没有命令或依赖的规则) 4.8 空目标文件 4.9 Makefile的特殊目标 4.10 多目标 4.11 多规则目标 4.12 静态模式 4.12.1 静态模式规则的语法 4.12.2 静态模式和隐含规则 4.13 双冒号规则 4.14 自动产生依赖 第五章:规则的命令 5.1 命令回显 5.2 命令的执行 5.3 并发执行命令 5.4 命令执行的错误 5.5 中断make的执行 5.6 make的递归执行 5.6.1 变量MAKE 5.6.2 变量和递归 5.6.3 命令行选项和递归 5.6.4 -w选项 5.7 定义命令包 5.8 空命令 第六章:Makefile中的变量 6.1 变量的引用 6.2 两种变量定义(赋值 ) 6.2.1 递归展开式变量 6.2.2 直接展开式变量 6.2.3 如何定义个空格 6.2.4 “?=”操作符 6.3 变量的高级用法 6.3.1 变量的替换引用 6.3.2 变量的套嵌引用 6.4 变量取值 6.5 如何设置变量 6.6 追加变量值 6.7 override 指示符 6.8 多行定义 6.9 系统环境变量 6.10 目标指定变量 6.11 模式指定变量 第七章:Makefile的条件执行 7.1 个例子 7.2 条件判断的基本语法 7.2.1 关键字“ifeq” 7.2.2 关键字“ifneq” 7.2.3 关键字“ifdef” 7.2.4 关键字“ifndef” 7.3 标记测试的条件语句 第八章:make的内嵌函数 8.1 函数的调用语法 8.2 文本处理函数 8.2.1 $(subst FROM,TO,TEXT) 8.2.2 $(patsubst PATTERN,REPLACEMENT,TEXT) 8.2.3 $(strip STRINT) 8.2.4 $(findstring FIND,IN) 8.2.5 $(filter PATTERN…,TEXT) 8.2.6 $(filter-out PATTERN...,TEXT) 8.2.7 $(sort LIST) 8.2.8 $(word N,TEXT) 8.2.9 $(wordlist S,E,TEXT) 8.2.10 $(words TEXT) 8.2.11 $(firstword NAMES…) 8.3 文件名处理函数 8.3.1 $(dir NAMES…) 8.3.2 $(notdir NAMES…) 8.3.3 $(suffix NAMES…) 8.3.4 $(basename NAMES…) 8.3.5 $(addsuffix SUFFIX,NAMES…) 8.3.6 $(addprefix PREFIX,NAMES…) 8.3.7 $(join LIST1,LIST2) 8.3.8 $(wildcard PATTERN) 8.4 foreach 函数 8.5 if 函数 8.6 call函数 8.7 value函数 8.8 eval函数 8.9 origin函数 8.10 shell函数 8.11 make的控制函数 8.11.1 $(error TEXT…) 8.11.2 $(warning TEXT…) 第九章:执行make 9.1 指定makefile文件 9.2 指定终极目标 9.3 替代命令的执行 9.4 防止特定文件重建 9.5 替换变量定义 9.6 使用make进行编译测试 9.7 make的命令行选项 第十章:make的隐含规则 10.1 隐含规则的使用 10.2 make的隐含规则览 10.3 隐含变量 10.3.1 代表命令的变量 10.3.2 命令参数的变量 10.4 make隐含规则链 10.5 模式规则 10.5.1 模式规则介绍 10.5.2 模式规则示例 10.5.3 自动化变量 10.5.4 模式的匹配 10.5.5 万用规则 10.5.6 重建内嵌隐含规则 10.6 缺省规则 10.7 后缀规则 10.8 隐含规则搜索算法 第十章:使用make更新静态库文件 11.1 库成员作为目标 11.2 静态库的更新 11.2.1 更新静态库的符号索引表 11.3 make静态库的注意事项 11.4 静态库的后缀规则 第十二章 : GNU make的特点 12.1 源自System v的特点 12.2 源自其他版本的特点 12.3 GNU make自身的特点 第十三章 和其它版本的兼容 第十四章 Makefile的约定 14.1 基本的约定 14.2 规则命令行的约定 14.3 代表命令变量 14.4 安装目录变量 14.5 Makefile的标准目标名 14.6 安装命令分类 第十五章 make的常见错误信息   附录:关键字索引 1. GNU make可识别的指示 符 2. GNU make函数 3. GNU make的自动化变量 4. GNU make环境变量 后序
对“info make”的翻译整理,不是个纯粹的语言翻译版本,其中对GNU make些语法和用法进行了些详细分析和说明,也加入了些个人的观点和实践总结。 本书的所有的例子都可以在支持V3.8版本的GNU make的系统中正确执行。 中文于册 伪目标 强制目标(没有命令或依赖的规则) 空目标文件 的特殊目标 多目标 多规则目标 静态模式 静态模式规则的语法 静态模式和隐含规则 双冒号规则 自动产生依赖 第五章:规则的命令 为规则书写命令 命令回显 命令的执行 并发执行命令 命令执行的错误 中断的执行 的递归执行 变量 变量和递归 命令行选项和递归 选项 定义命令包 第六章 中的变量 使用变量 变量的引用 两种变量定义(赋值) 归展开式变量 直接展开式变量 定义个空格 ”操作符 变量的高级用法 变量的替换引用 变量的套嵌引用 变量取值 如何设置变量 追加变量值 指示符 多行定义 系统环境变量 目标指定变量 模式指定变量 第七章 的条件执行 的条件判断 个例子 条件判断的基本语法 标记测试的条件语句 笫八章:的内嵌函数 的函数 年月日 中文于册 函数的调用语法 文本夂理函数 文件名处理函数 函数 函数 西数 函数 函数 函数 西数 的控制函数 第九章:执行 执行 指定 文件 指定终极日标 替代命令的执行 防止特定文件重建 替换变量定义 使用 进行编译测试 的命令行选项 第十章: 的隐含规则 使用隐含规则 隐含规则的使用 的隐含规则览 隐含变量 代表命令的变量 命令参数的变量 隐含规则链 模式规 模式规则介绍 模式规则示例 自动化变量 年月日 中文于册 模式的匹配 万用规则 重建内嵌隐含规则 缺省规则 后缀规则 隐含规则搜索算法 笫十章:使用更新静态库文件 更新静态库文件 库成员作为目标 静态库的更新 更新静态庠的符号索引表 静态库的注意享项 静态库的后缀规则 第十二章: 的特点 的些特点 源自 的特点 源自其他版本的特点 自身的特点 第十三章和其它版本的兼容 不兼容性 第十四章 的约定 书写约定 基本的约定 规则命令行的约定 代表命令变量 安装目录变量 的标准目标名 安装命令分类 第十五章的常见错误信息 产生的错误信息 附录:关键字索引 可识别的指示符 函数 的自动化变量 环境变量 后序 年月日 中文于册 关于本书 本文瑾献给所有热爱 的程序员!本中文文档版权所有 本文比较完整的讲述 工具,涵盖 的用法、语法。同时重 讨论如何为个工程编写 作为个程序员, 工具的使用以及编 写 是必嚅的。系统、详细讲述的中文资料比较少,出于对广大中文 的支持,本人在工作之余,花了个多月时间完成对“ 的翻译整理,完成 这个中文手册。夲书不是个纯粹的语言翻译版本,其中对 的些语法 和用法根据我个人的工作经验进行了些详细分析和说明,也加入了些个人的观点和 实践总结。本书的所有的例子都可以在支持版本的 的系统中正确执行。 由于个人水平限制,本文在些地方存在描述不准确之处。恳请大家在阅读过程中 提出您宝贵的意见,也是对我个人的帮助。我的个人电子邯箱地址: 非常愿意和大家交流!共同学习 阅读本书之前,读者应该对 的工具链和 的些常用编程工具有定的 了解。诸如: 等;同时在书写 时,需要能够进行些 基本的编程。这些工具是维护个工程的基础。如果大家对这些工具的用法不是 很熟悉,可参考项目资料 阅读本文的几点建议: 如果之前你对 没有了解、当前也不想深入的学习 的读 者。可只阅读本文各章节前半部分的内容(作为各章节的基础知识) 如果你已经对 比较熟悉,你更霄要关心此版本的新增特点、功能、 和之前版本不兼容之处;也可以作为开发过程过程的参考手册。 之前你对 没有概念、或者刚开始接触,本身又想成为个 下 的专业程序员,那么建议:完整学习本文的各个章节,包括了基础知识和高级 用法、技巧。它会为你在 下的工程开发、工程管理提供非常有用的帮助。 此中文文档当前版本 本文的所有勘误和最新版本可在主 页 上获取!! 谢谢! 徐海兵 年月日 中文于册 第章:概述 概既述 环境下的程序员如果不会侠用 来构建和管理自己的工程,应该 不能算是个合柊的专业程序员,至少不能称得上是程序员。在 )环 境下侠用 的 工具能够比较容易的构建个属于你自己的工程,整个工程的 编译只需要个命令就可以完成编译、连接以至于最后的执行。不过这需要我们投入 些时间去完成个或者多个称之为 文件的编写。此文件正是 正常工作 的基础 所要完成的 文件描述了整个工程的编译、连接等规则。其中包括:工程 中的哪些源文件需要编译以及如何编译、需要创建那些库文件以及如何创建这些库文 件、如何最后产生我们想要得可执行文件。尽管看起来可能是很复杂的事情,但是为工 程编写
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值