Makefile教程,第六部分,书写命令

每条规则中的命令和操作系统 Shell 的命令行是一致的。make 会一按顺序一条一条的执行命令,每条命令的开头必须以[Tab]键开头,除非,命令是紧跟在依赖规则后面的分号后的。在命令行之间中的空格或是空行会被忽略,但是如果该空格或空行是以 Tab 键开头的,那么 make 会认为其是一个空命令。

我们在 UNIX 下可能 会使用不 同的 Shell ,但是 make 的命令 默认是 被 “/bin/sh”——UNIX 的标准 Shell 解释执行的。除非你特别指定一个其它的 Shell。 Makefile 中,“#”是注释符,很像 C/C++中的“//”,其后的本行字符都被注释。

一、显示命令

通常,make 会把其要执行的命令行在命令执行前输出到屏幕上。当我们用“@”字符在命令行前,那么,这个命令将不被 make 显示出来,最具代表性的例子是,我们用这个功能来像屏幕显示一些信息。如:@echo 正在编译 XXX 模块…

当 make 执行时,会输出“正在编译 XXX 模块. ”字串,但不会输出命令,如果没
有“@”,那么,make 将输出: echo 正在编译 XXX 模块…
正在编译 XXX 模块…

如果 make 执行时,带入 make 参数“-n”或“–just-print”,那么其只是显示命令,但不会执行命令,这个功能很有利于我们调试我们的 Makefile,看看我们书写的命令是执行起来是什么样子的或是什么顺序的。而 make 参数“-s”或“–slient”则是全面禁止命令的显示。

二、命令执行

当依赖目标新于目标时,也就是当规则的目标需要被更新时,make 会一条一条的执行其后的命令。需要注意的是,如果你要让上一条命令的结果应用在下一条命令时,你应该使用分号分隔这两条命令。比如你的第一条命令是 cd 命令,你希望第二条命令得在 cd 之后的基础上运行,那么你就不能把这两条命令写在两行上,而应该把这两条命令写在一行上,用分号分隔。如:

示例一: exec:

cd /home/hchen pwd

示例二: exec:

cd /home/hchen; pwd

当我们执行“make exec”时,第一个例子中的 cd 没有作用,pwd 会打印出当前的 Makefile 目录,而第二个例子中,cd 就起作用了,pwd 会打印出“/home/hchen”。make一般是使用环境变量 SHELL 中所定义的系统 Shell 来执行命令,默认情况下使用 UNIX 的 标准 Shell——/bin/sh 来执行命令。但在 MS-DOS 下有点特殊,因为 MS-DOS 下没有 SHELL环境变量,当然你也可以指定。如果你指定了 UNIX 风格的目录形式,首先,make 会在 SHELL所指定的路径中找寻命令解释器,如果找不到,其会在当前盘符中的当前目录中寻找,如果再找不到,其会在 PATH 环境变量中所定义的所有路径中寻找。MS-DOS 中,如果你定义的命令解释器没有找到,其会给你的命令解释器加上诸如“.exe”、“.com”、“.bat”、“.sh”等后缀。

三、命令出错

每当命令运行完后,make 会检测每个命令的返回码,如果命令返回成功,那么 make 会执行下一条命令,当规则中所有的命令成功返回后,这个规则就算是成功完成了。如果一个规则中的某个命令出错了(命令退出码非零),那么 make 就会终止执行当前规则,这将有可能终止所有规则的执行。
有些时候,命令的出错并不表示就是错误的。例如 mkdir 命令,我们一定需要建立一个目录,如果目录不存在,那么 mkdir 就成功执行,万事大吉,如果目录存在,那么就出错了。我们之所以使用 mkdir 的意思就是一定要有这样的一个目录,于是我们就不希望 mkdir 出错而终止规则的运行。

为了做到这一点,忽略命令的出错,我们可以在 Makefile 的命令行前加一个减号“-”
(在 Tab 键之后),标记为不管命令出不出错都认为是成功的。如:

 clean:
-rm -f *.o

还有一个全局的办法是,给 make 加上“-i”或是“–ignore-errors”参数,那么, Makefile 中所有命令都会忽略错误。而如果一个规则是以“.IGNORE”作为目标的,那么这个规则中的所有命令将会忽略错误。这些是不同级别的防止命令出错的方法,你可以根据你的不同喜欢设置。

还有一个要提一下的 make 的参数的是“-k”或是“–keep-going”,这个参数的意思是,如果某规则中的命令出错了,那么就终目该规则的执行,但继续执行其它规则。

四、嵌套执行 make

在一些大的工程中,我们会把我们不同模块或是不同功能的源文件放在不同的目录中,我们可以在每个目录中都书写一个该目录的 Makefile,这有利于让我们的 Makefile 变得更加地简洁,而不至于把所有的东西全部写在一个 Makefile 中,这样会很难维护我们的 Makefile,这个技术对于我们模块编译和分段编译有着非常大的好处。

例如,我们有一个子目录叫 subdir,这个目录下有个 Makefile 文件,来指明了这个目录下文件的编译规则。那么我们总控的 Makefile 可以这样书写:

subsystem:
cd subdir && $(MAKE)
其等价于: subsystem:
$(MAKE) -C subdir

定义$(MAKE)宏变量的意思是,也许我们的 make 需要一些参数,所以定义成一个变量比较利于维护。这两个例子的意思都是先进入“subdir”目录,然后执行 make 命令。
我们把这个 Makefile 叫做“总控 Makefile”,总控 Makefile 的变量可以传递到下级的 Makefile 中(如果你显示的声明),但是不会覆盖下层的 Makefile 中所定义的变量,除非指定了“-e”参数。

如果你要传递变量到下级 Makefile 中,那么你可以使用这样的声明: export <variable …>
如果你不想让某些变量传递到下级 Makefile 中,那么你可以这样声明: unexport <variable …>
如:

示例一:

export variable = value
其等价于:
variable = value export variable

其等价于:

export variable := value其等价于:
variable := value export variable

示例二:

export variable += value其等价于:
variable += value export variable

如果你要传递所有的变量,那么,只要一个 export 就行了。后面什么也不用跟,表示传递所有的变量。

需要注意的是,有两个变量,一个是 SHELL,一个是 MAKEFLAGS,这两个变量不管你是否 export,其总是要传递到下层 Makefile 中,特别是 MAKEFILES 变量,其中包含了 make的参数信息,如果我们执行“总控 Makefile”时有 make 参数或是在上层 Makefile 中定义了这个变量,那么 MAKEFILES 变量将会是这些参数,并会传递到下层 Makefile 中,这是一个系统级的环境变量。

但是 make 命令中的有几个参数并不往下传递,它们是“-C”,“-f”,“-h”“-o”和 “-W”(有关 Makefile 参数的细节将在后面说明),如果你不想往下层传递参数,那么,你可以这样来:

subsystem:
cd subdir && $(MAKE) MAKEFLAGS=

如果你定义了环境变量 MAKEFLAGS,那么你得确信其中的选项是大家都会用到的,如果其中有“-t”,“-n”,和“-q”参数,那么将会有让你意想不到的结果,或许会让你异常地恐慌。

还有一个在“嵌套执行”中比较有用的参数,“-w”或是“–print-directory”会在 make 的过程中输出一些信息,让你看到目前的工作目录。比如,如果我们的下级 make 目录是“/home/hchen/gnu/make”,如果我们使用“make -w”来执行,那么当进入该目录时,我们会看到:

make: Entering directory `/home/hchen/gnu/make'.

而在完成下层 make 后离开目录时,我们会看到:

make: Leaving directory `/home/hchen/gnu/make'

当你使用“-C”参数来指定 make 下层Makefile 时,“-w”会被自动打开的。如果参数中有 “-s”(“–slient”)或是“–no-print-directory”,那么,“-w”总是失效的。

五、定义命令包

如果 Makefile 中出现一些相同命令序列,那么我们可以为这些相同的命令序列定义一个变量。定义这种命令序列的语法以“define”开始,以“endef”结束,如:

define run-yacc yacc 
$(firstword $^) 
mv y.tab.c $@
endef

这里,“run-yacc”是这个命令包的名字,其不要和 Makefile 中的变量重名。在 “define”和“endef”中的两行就是命令序列。这个命令包中的第一个命令是运行 Yacc程序,因为 Yacc 程序总是生成“y.tab.c”的文件,所以第二行的命令就是把这个文件改改名字。还是把这个命令包放到一个示例中来看看吧。

foo.c : foo.y
$(run-yacc)

我们可以看见,要使用这个命令包,我们就好像使用变量一样。在这个命令包的使用中,命令包“run-yacc”中的“ ” 就是“ f o o . y ”,“ ^”就是“foo.y”,“ 就是foo.y@”就是“foo.c”(有关这种以“$”开头的特殊变量,我们会在后面介绍),make 在执行命令包时,命令包中的每个命令会被依次独立执行。

  • 21
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
GNU make中文手册.....................................................................................................................1 ver - 3.8.......................................................................................................................................1 第一章:概述...............................................................................................................................7 1.1 概述.................................................................................................................................7 1.2 准备知识..........................................................................................................................8 第二章 GNU make 介绍.............................................................................................................9 2 GNU make 介绍....................................................................................................................9 2.1 Makefile简介..................................................................................................................10 2.2 Makefile规则介绍...........................................................................................................11 2.3 简单的示例.....................................................................................................................12 2.4 make如何工作...............................................................................................................13 2.5 指定变量........................................................................................................................15 2.6 自动推导规则.................................................................................................................16 2.7 另类风格的makefile.......................................................................................................17 2.8 清除工作目录过程文件...................................................................................................18 第三章:Makefile 总述..............................................................................................................20 3 Makefile总述........................................................................................................................20 3.1 Makefile的内容...............................................................................................................20 3.2 makefile文件的命名.......................................................................................................21 3.3 包含其它makefile文件....................................................................................................22 3.4 变量 MAKEFILES..........................................................................................................24 3.5 变量 MAKEFILE_LIST..................................................................................................26 3.6 其他特殊变量.................................................................................................................26 3.7 makefile文件的重建.......................................................................................................27 3.8 重载另外一个makefile....................................................................................................28 3.9 make如何解析makefile文件...........................................................................................30 3.9.1 变量取值..................................................................................................................30 3.9.2 条件语句..................................................................................................................31 3.9.3 规则的定义...............................................................................................................31 3.10 总结...............................................................................................................................31 第四章:Makefile的规则............................................................................................................33 4 Makefile规则........................................................................................................................33 4.1 一个例子........................................................................................................................33 4.2 规则语法........................................................................................................................34 4.3 依赖的类型.....................................................................................................................35 4.4 文件名使用通配符..........................................................................................................36 4.4.1 统配符使用举例........................................................................................................37 4.4.2 通配符存在的缺陷....................................................................................................38 4.4.3 函数wildcard............................................................................................................38 4.5 目录搜寻........................................................................................................................39 4.5.1 一般搜索(变量VPATH)........................................................................................39 4.5.2 选择性搜索(关键字vpath)....................................................................................40 4.5.3 目录搜索的机制........................................................................................................41 4.5.4 命令行和搜索目录....................................................................................................44 4.5.5 隐含规则和搜索目录.................................................................................................44 4.5.6 库文件和搜索目录....................................................................................................45 4.6 Makefile伪目标...............................................................................................................46 4.7 强制目标(没有命令或依赖的规则).............................................................................50 4.8 空目标文件.....................................................................................................................50 4.9 Makefile的特殊目标.......................................................................................................51 4.10 多目标............................................................................................................................54 4.11 多规则目标.....................................................................................................................55 4.12 静态模式........................................................................................................................56 4.12.1 静态模式规则的语法.......................................................................................56 4.12.2 静态模式和隐含规则.......................................................................................58 4.13 双冒号规则.....................................................................................................................59 4.14 自动产生依赖.................................................................................................................60 第五章:规则的命令..................................................................................................................63 5 为规则书写命令...................................................................................................................63 5.1 命令回显........................................................................................................................63 5.2 命令的执行.....................................................................................................................64 5.3 并发执行命令.................................................................................................................65 5.4 命令执行的错误..............................................................................................................67 5.5 中断make的执行............................................................................................................68 5.6 make的递归执行............................................................................................................69 5.6.1 变量MAKE...............................................................................................................70 5.6.2 变量和递归...............................................................................................................71 5.6.3 命令行选项和递归....................................................................................................75 5.6.4 -w选项......................................................................................................................77 5.7 定义命令包.....................................................................................................................78 5.8 空命令............................................................................................................................80 第六章:Makefile中的变量.........................................................................................................81 6 使用变量..............................................................................................................................81 6.1 变量的引用.....................................................................................................................82 6.2 两种变量定义(赋值)...................................................................................................83 6.2.1 递归展开式变量........................................................................................................83 6.2.2 直接展开式变量........................................................................................................85 6.2.3 定义一个空格...........................................................................................................86 6.2.4 “?=”操作符.............................................................................................................87 6.3 变量的高级用法..............................................................................................................88 6.3.1 变量的替换引用........................................................................................................88 6.3.2 变量的套嵌引用........................................................................................................88 6.4 变量取值........................................................................................................................92 6.5 如何设置变量.................................................................................................................93 6.6 追加变量值.....................................................................................................................94 6.7 override 指示符.............................................................................................................96 6.8 多行定义........................................................................................................................98 6.9 系统环境变量.................................................................................................................99 6.10 目标指定变量...............................................................................................................101 6.11 模式指定变量...............................................................................................................103 第七章:Makefile的条件执行...................................................................................................104 7 Makefile的条件判断...........................................................................................................104 7.1 一个例子......................................................................................................................104 7.2 条件判断的基本语法....................................................................................................105 7.3 标记测试的条件语句....................................................................................................108 第八章:make的内嵌函数........................................................................................................109 8 make的函数.......................................................................................................................109 8.1 函数的调用语法............................................................................................................109 8.2 文本处理函数...............................................................................................................110 8.2.1 $(subst FROM,TO,TEXT).....................................................................................110 8.2.2 $(patsubst PATTERN,REPLACEMENT,TEXT)...................................................110 8.2.3 $(strip STRINT).....................................................................................................112 8.2.4 $(findstring FIND,IN)............................................................................................112 8.2.5 $(filter PATTERN…,TEXT)...................................................................................112 8.2.6 $(filter-out PATTERN...,TEXT).............................................................................113 8.2.7 $(sort LIST)...........................................................................................................113 8.2.8 $(word N,TEXT)....................................................................................................114 8.2.9 $(wordlist S,E,TEXT)............................................................................................114 8.2.10 $(words TEXT)............................................................................................114 8.2.11 $(firstword NAMES…)................................................................................115 8.3 文件名处理函数............................................................................................................115 8.3.1 $(dir NAMES…)....................................................................................................115 8.3.2 $(notdir NAMES…)...............................................................................................116 8.3.3 $(suffix NAMES…)...............................................................................................116 8.3.4 $(basename NAMES…).......................................................................................117 8.3.5 $(addsuffix SUFFIX,NAMES…)...........................................................................117 8.3.6 $(addprefix PREFIX,NAMES…)...........................................................................118 8.3.7 $(join LIST1,LIST2)...............................................................................................118 8.3.8 $(wildcard PATTERN)..........................................................................................119 8.4 foreach 函数................................................................................................................119 8.5 if 函数..........................................................................................................................120 8.6 call函数........................................................................................................................121 8.7 value函数.....................................................................................................................123 8.8 eval函数.......................................................................................................................124 8.9 origin函数.....................................................................................................................125 8.10 shell函数......................................................................................................................127 8.11 make的控制函数..........................................................................................................128 8.11.1 $(error TEXT…)...........................................................................................128 8.11.2 $(warning TEXT…)......................................................................................129 第九章:执行make..................................................................................................................130 9 执行make..........................................................................................................................130 9.1 指定makefile文件.........................................................................................................130 9.2 指定终极目标...............................................................................................................131 9.3 替代命令的执行............................................................................................................133 9.4 防止特定文件重建........................................................................................................135 9.5 替换变量定义...............................................................................................................136 9.6 使用make进行编译测试...............................................................................................137 9.7 Tmake的命令行选项....................................................................................................138 第十章:make的隐含规则........................................................................................................143 10 使用隐含规则...............................................................................................................143 10.1 隐含规则的使用............................................................................................................143 10.2 make的隐含规则一览...................................................................................................145 10.3 隐含变量......................................................................................................................148 10.3.1 代表命令的变量............................................................................................149 10.3.2 命令参数的变量............................................................................................150 10.4 make隐含规则链..........................................................................................................151 10.5 模式规则......................................................................................................................153 10.5.1 模式规则介绍................................................................................................153 10.5.2 模式规则示例................................................................................................155 10.5.3 自动化变量....................................................................................................156 T10.5.4 T模式的匹配.................................................................................................159 10.5.5 万用规则.......................................................................................................160 10.5.6 重建内嵌隐含规则.........................................................................................161 10.6 缺省规则......................................................................................................................162 10.7 后缀规则......................................................................................................................162 10.8 隐含规则搜索算法........................................................................................................164 第十一章:使用make更新静态库文件......................................................................................166 11 更新静态库文件............................................................................................................166 11.1 库成员作为目标............................................................................................................166 11.2 静态库的更新...............................................................................................................167 11.2.1 更新静态库的符号索引表..............................................................................168 11.3 make静态库的注意事项...............................................................................................168 11.4 静态库的后缀规则........................................................................................................169 第十二章 : GNU make的特点...............................................................................................170 12 GNU make的一些特点.................................................................................................170 12.1 源自System v的特点....................................................................................................170 12.2 源自其他版本的特点....................................................................................................171 12.3 GNU make自身的特点.................................................................................................172 第十三章 和其它版本的兼容....................................................................................................174 13 不兼容性......................................................................................................................174 第十四章 Makefile的约定........................................................................................................176 14 书写约定......................................................................................................................176 14.1 基本的约定...................................................................................................................176 14.2 规则命令行的约定........................................................................................................178 14.3 代表命令变量...............................................................................................................179 14.4 安装目录变量...............................................................................................................180 14.5 Makefile的标准目标名..................................................................................................185 14.6 安装命令分类...............................................................................................................190 第十五章 make的常见错误信息...............................................................................................193 15 make产生的错误信息...................................................................................................193 附录1:关键字索引..................................................................................................................196 GNU make可识别的指示符:..............................................................................................196 GNU make函数:...............................................................................................................197 GNU make的自动化变量.....................................................................................................197 GNU make环境变量............................................................................................................198 后序.........................................................................................................................................198
第一部分、概述...............................................................................................................................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 第 2 页共 78 页 2005 年 10 月 14 日整理:祝冬华跟我一起写 Makefile 作者:陈皓 七、环境变量.........................................................................................................................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 第 3 页共 78 页 2005 年 10 月 14 日整理:祝冬华跟我一起写 Makefile 作者:陈皓 一、 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、模式规则示例 ..........................................................................................................69 3、自动化变量 ..............................................................................................................70 4、模式的匹配 ..............................................................................................................72 5、重载内建隐含规则 ..................................................................................................72 六、老式风格的"后缀规则" .................................................................................................73 七、隐含规则搜索算法.........................................................................................................74 第十二部分 使用make更新函数库文件....................................................................................75 一、函数库文件的成员.........................................................................................................75 二、函数库成员的隐含规则.................................................................................................75 三、函数库文件的后缀规则.................................................................................................76 第 4 页共 78 页 2005 年 10 月 14 日整理:祝冬华跟我一起写 Makefile 作者:陈皓 四、注意事项.........................................................................................................................76 第十三部分 后序...........................................................................................................................77
跟我一起写 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、模式
对“info make”的翻译整理,不是一个纯粹的语言翻译版本,其中对GNU make的一些语法和用法进行了一些详细分析和说明,也加入了一些个人的观点和实践总结。 本书的所有的例子都可以在支持V3.8版本的GNU make的系统中正确执行。 中文于册 伪目标 强制目标(没有命令或依赖的规则) 空目标文件 的特殊目标 多目标 多规则目标 静态模式 静态模式规则的语法 静态模式和隐含规则 双冒号规则 自动产生依赖 第五章:规则的命令 为规则书写命令 命令回显 命令的执行 并发执行命令 命令执行的错误 中断的执行 的递归执行 变量 变量和递归 命令行选项和递归 选项 定义命令第六章 中的变量 使用变量 变量的引用 两种变量定义(赋值) 归展开式变量 直接展开式变量 定义一个空格 ”操作符 变量的高级用法 变量的替换引用 变量的套嵌引用 变量取值 如何设置变量 追加变量值 指示符 多行定义 系统环境变量 目标指定变量 模式指定变量 第七章 的条件执行 的条件判断 个例子 条件判断的基本语法 标记测试的条件语句 笫八章:的内嵌函数 的函数 年月日 中文于册 函数的调用语法 文本夂理函数 文件名处理函数 函数 函数 西数 函数 函数 函数 西数 的控制函数 第九章:执行 执行 指定 文件 指定终极日标 替代命令的执行 防止特定文件重建 替换变量定义 使用 进行编译测试 的命令行选项 第十章: 的隐含规则 使用隐含规则 隐含规则的使用 的隐含规则一览 隐含变量 代表命令的变量 命令参数的变量 隐含规则链 模式规 模式规则介绍 模式规则示例 自动化变量 年月日 中文于册 模式的匹配 万用规则 重建内嵌隐含规则 缺省规则 后缀规则 隐含规则搜索算法 笫十一章:使用更新静态库文件 更新静态库文件 库成员作为目标 静态库的更新 更新静态庠的符号索引表 静态库的注意享项 静态库的后缀规则 第十二章: 的特点 的一些特点 源自 的特点 源自其他版本的特点 自身的特点 第十三章和其它版本的兼容 不兼容性 第十四章 的约定 书写约定 基本的约定 规则命令行的约定 代表命令变量 安装目录变量 的标准目标名 安装命令分类 第十五章的常见错误信息 产生的错误信息 附录:关键字索引 可识别的指示符 函数 的自动化变量 环境变量 后序 年月日 中文于册 关于本书 本文瑾献给所有热爱 的程序员!本中文文档版权所有 本文比较完整的讲述 工具,涵盖 的用法、语法。同时重 讨论如何为一个工程编写 作为一个程序员, 工具的使用以及编 写 是必嚅的。系统、详细讲述的中文资料比较少,出于对广大中文 的支持,本人在工作之余,花了个多月时间完成对“ 的翻译整理,完成 这个中文版手册。夲书不是一个纯粹的语言翻译版本,其中对 的一些语法 和用法根据我个人的工作经验进行了一些详细分析和说明,也加入了一些个人的观点和 实践总结。本书的所有的例子都可以在支持版本的 的系统中正确执行。 由于个人水平限制,本文在一些地方存在描述不准确之处。恳请大家在阅读过程中 提出您宝贵的意见,也是对我个人的帮助。我的个人电子邯箱地址: 非常愿意和大家交流!共同学习 阅读本书之前,读者应该对 的工具链和 的一些常用编程工具有一定的 了解。诸如: 等;同时在书写 时,需要能够进行一些 基本的编程。这些工具是维护一个工程的基础。如果大家对这些工具的用法不是 很熟悉,可参考项目资料 阅读本文的几点建议: 如果之前你对 没有了解、当前也不想深入的学习 的读 者。可只阅读本文各章节前半部分的内容(作为各章节的基础知识) 如果你已经对 比较熟悉,你更霄要关心此版本的新增特点、功能、 和之前版本不兼容之处;也可以作为开发过程过程的参考手册。 之前你对 没有概念、或者刚开始接触,本身又想成为一个 下 的专业程序员,那么建议:完整学习本文的各个章节,包括了基础知识和高级 用法、技巧。它会为你在 下的工程开发、工程管理提供非常有用的帮助。 此中文文档当前版本 本文的所有勘误和最新版本可在主 页 上获取!! 谢谢! 徐海兵 年月日 中文于册 第一章:概述 概既述 环境下的程序员如果不会侠用 来构建和管理自己的工程,应该 不能算是一个合柊的专业程序员,至少不能称得上是程序员。在 )环 境下侠用 的 工具能够比较容易的构建一个属于你自己的工程,整个工程的 编译只需要一个命令就可以完成编译、连接以至于最后的执行。不过这需要我们投入 些时间去完成一个或者多个称之为 文件的编写。此文件正是 正常工作 的基础 所要完成的 文件描述了整个工程的编译、连接等规则。其中包括:工程 中的哪些源文件需要编译以及如何编译、需要创建那些库文件以及如何创建这些库文 件、如何最后产生我们想要得可执行文件。尽管看起来可能是很复杂的事情,但是为工 程编写
跟我一起写makefile PDF文件,有目录,高清无水印,阅读体验佳。 跟我一起写 Makefile 陈皓 跟我一起写 Makefile ........................................................................................................................1 第一章 概述.....................................................................................................................3 第二章 关于程序的编译和链接.....................................................................................3 第三章 Makefile 介绍 ....................................................................................................4 一、 Makefile的规则 ..........................................................................................................5 二、一个示例.....................................................................................................................5 三、 make是如何工作的....................................................................................................7 四、 makefile中使用变量...................................................................................................7 五、让make自动推导........................................................................................................9 六、另类风格的makefile.................................................................................................10 七、清空目标文件的规则...............................................................................................10 第四章 Makefile 总述 ..................................................................................................11 一、 Makefile里有什么? ................................................................................................11 二、 Makefile的文件名 ....................................................................................................12 三、引用其它的Makefile ................................................................................................12 四、环境变量 MAKEFILES ..........................................................................................13 五、 make的工作方式......................................................................................................13 第五章 书写规则...........................................................................................................14 一、规则举例...................................................................................................................14 二、规则的语法...............................................................................................................15 三、在规则中使用通配符...............................................................................................15 四、文件搜寻...................................................................................................................16 五、伪目标.......................................................................................................................18 六、多目标.......................................................................................................................19 七、静态模式...................................................................................................................20 八、自动生成依赖性.......................................................................................................21 第六书写命令...........................................................................................................23 一、显示命令...................................................................................................................24 二、命令执行...................................................................................................................24 三、命令出错...................................................................................................................25 四、嵌套执行make..........................................................................................................26 五、定义命令包...............................................................................................................28 第七章 使用变量...........................................................................................................29 一、变量的基础...............................................................................................................29 二、变量中的变量...........................................................................................................30 三、变量高级用法...........................................................................................................32四、追加变量值...............................................................................................................35 五、 override 指示符 .......................................................................................................36 六、多行变量...................................................................................................................36 七、环境变量...................................................................................................................37 八、目标变量...................................................................................................................37 九、模式变量...................................................................................................................38 第八章 使用条件判断...................................................................................................39 一、示例 ..........................................................................................................................39 二、语法 ..........................................................................................................................40 第九章 使用函数...........................................................................................................42 一、函数的调用语法.......................................................................................................42 二、字符串处理函数.......................................................................................................43 三、文件名操作函数.......................................................................................................46 四、 foreach 函数.............................................................................................................48 五、 if 函数 ......................................................................................................................49 六、 call函数.....................................................................................................................49 七、 origin函数.................................................................................................................50 八、 shell函数...................................................................................................................51 九、控制make的函数......................................................................................................51 第十章 make 的运行....................................................................................................52 一、 make的退出码..........................................................................................................52 二、指定Makefile ............................................................................................................53 三、指定目标...................................................................................................................53 四、检查规则...................................................................................................................55 五、 make的参数..............................................................................................................55 第十一章 隐含规则...........................................................................................................59 一、使用隐含规则...........................................................................................................59 二、隐含规则一览...........................................................................................................60 三、隐含规则使用的变量...............................................................................................62 四、隐含规则链...............................................................................................................64 五、定义模式规则...........................................................................................................65 六、老式风格的“后缀规则” .......................................................................................69 七、隐含规则搜索算法...................................................................................................70 第十二章 使用make更新函数库文件 ..............................................................................71 一、函数库文件的成员...................................................................................................72 二、函数库成员的隐含规则...........................................................................................72 三、函数库文件的后缀规则...........................................................................................73 四、注意事项...................................................................................................................73 第十三章 后序...................................................................................................................73

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chy_wang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值