跟我一起写 Makefile
arvin_xiaoting
岁月静好~
展开
-
#跟我一起写 Makefile# 书写规则
目录规则举例规则的语法在规则中使用通配符文件搜寻伪目标静态模式自动生成依赖性 规则包含两个部分,一个是依赖关系,一个是生成目标的方法。 在Makefile中,规则的顺序是很重要的,因为,Makefile中只应该有一个最终目标,其它的目标都是被这个目标所连带出来的,所以一定要让make知道你的最终目标是什么。一般来说,定义在Makefil...原创 2019-03-30 11:17:06 · 16699 阅读 · 0 评论 -
#跟我一起写 Makefile# 控制make的函数
目录errorwarning make提供了一些函数来控制make的运行。通常,你需要检测一些运行Makefile时的运行时信息,并且根据这些信息来决定,你是让make继续执行,还是停止。error$(error <text ...>) 产生一个致命的错误,<text ...>是错误信息。注意,error函数不会...原创 2019-04-02 17:08:14 · 16313 阅读 · 0 评论 -
#跟我一起写 Makefile# make的退出码&指定Makefile
目录make的退出码指定Makefile 一般来说,最简单的就是直接在命令行下输入make命令,make命令会找当前目录的makefile来执行,一切都是自动的。但也有时你也许只想让make重编译某些文件,而不是整个工程,而又有的时候你有几套编译规则,你想在不同的时候使用不同的编译规则,等等。本章节就是讲述如何使用make命令的。make的退出码 ...原创 2019-04-02 17:11:57 · 20259 阅读 · 0 评论 -
#跟我一起写 Makefile# 指定目标
目录“all”“clean”“install”“print”“tar”“dist”“TAGS”“check”和“test” 一般来说,make的最终目标是makefile中的第一个目标,而其它目标一般是由这个目标连带出来的。这是make的默认行为。当然,一般来说,你的makefile中的第一个目标是由许多个目标组成,你可以指示make,让其完成你所...原创 2019-04-02 17:18:55 · 17250 阅读 · 0 评论 -
#跟我一起写 Makefile# 自动推导&另类风格&清空目标文件
目录让make自动推导另类风格的makefile清空目标文件的规则让make自动推导 GNU的make很强大,它可以自动推导文件以及文件依赖关系后面的命令,于是我们就没必要去在每一个[.o]文件后都写上类似的命令,因为,我们的make会自动识别,并自己推导命令。 只要make看到一个[.o]文件,它就会自动的把[.c]文件加在依赖关系中,如果mak...原创 2019-03-29 13:22:12 · 16380 阅读 · 0 评论 -
#跟我一起写 Makefile# Makefile里有什么&Makefile文件名&引用其它的Makefile&工作方式
目录Makefile里有什么?Makefile的文件名引用其它的Makefile环境变量 MAKEFILESmake的工作方式Makefile里有什么? Makefile里主要包含了五个东西:显式规则、隐晦规则、变量定义、文件指示和注释。1、显式规则。显式规则说明了,如何生成一个或多的的目标文件。这是由Makefile的书写者明显指出,要生成的文件...原创 2019-03-29 13:38:15 · 16728 阅读 · 0 评论 -
#跟我一起写 Makefile# 检查规则&make的参数
目录检查规则make的参数检查规则 有时候,我们不想让我们的makefile中的规则执行起来,我们只想检查一下我们的命令,或是执行的序列。于是我们可以使用make命令的下述参数:“-n” “--just-print” “--dry-run” “--recon” 不执行参数,这些参数只是打印命令,不管目标是否更新,把规则和连带规则下的命令打印...原创 2019-04-08 19:55:09 · 17396 阅读 · 0 评论 -
#跟我一起写 Makefile# 隐含规则&使用隐含规则
目录隐含规则使用隐含规则隐含规则 在我们使用Makefile时,有一些我们会经常使用,而且使用频率非常高的东西,比如,我们编译C/C++的源程序为中间目标文件(Unix下是[.o]文件,Windows下是[.obj]文件)。本章讲述的就是一些在Makefile中的“隐含的”,早先约定了的,不需要我们再写出来的规则。 “隐含规则”也就是一种惯例...原创 2019-04-08 20:04:51 · 16778 阅读 · 0 评论 -
#跟我一起写 Makefile# 隐含规则一览
目录1、编译C程序的隐含规则2、编译C++程序的隐含规则3、编译Pascal程序的隐含规则4、编译Fortran/Ratfor程序的隐含规则5、预处理Fortran/Ratfor程序的隐含规则6、编译Modula-2程序的隐含规则7、汇编和汇编预处理的隐含规则8、链接Object文件的隐含规则9、Yacc C程序时的隐含规则10、Lex C程序时的隐含规则...原创 2019-04-08 20:15:14 · 16459 阅读 · 0 评论 -
#跟我一起写 Makefile# 隐含规则使用的变量
在隐含规则中的命令中,基本上都是使用了一些预先设置的变量。你可以在你的makefile中改变这些变量的值,或是在make的命令行中传入这些值,或是在你的环境变量中设置这些值,无论怎么样,只要设置了这些特定的变量,那么其就会对隐含规则起作用。当然,你也可以利用make的“-R”或“--no–builtin-variables”参数来取消你所定义的变量对隐含规则的作用。 ...原创 2019-04-09 11:32:19 · 15071 阅读 · 0 评论 -
#跟我一起写 Makefile# 隐含规则链&定义模式规则
目录隐含规则链定义模式规则隐含规则链 有些时候,一个目标可能被一系列的隐含规则所作用。例如,一个[.o]的文件生成,可能会是先被Yacc的[.y]文件先成[.c],然后再被C的编译器生成。我们把这一系列的隐含规则叫做“隐含规则链”。 在上面的例子中,如果文件[.c]存在,那么就直接调用C的编译器的隐含规则,如果没有[.c]文件,但有一个[.y]文件,...原创 2019-04-09 20:49:30 · 16563 阅读 · 0 评论 -
#跟我一起写 Makefile# 老式风格的"后缀规则"&隐含规则搜索算法
目录老式风格的"后缀规则"隐含规则搜索算法老式风格的"后缀规则" 后缀规则是一个比较老式的定义隐含规则的方法。后缀规则会被模式规则逐步地取代。因为模式规则更强更清晰。为了和老版本的Makefile兼容,GNU make同样兼容于这些东西。后缀规则有两种方式:"双后缀"和"单后缀"。 双后缀规则定义了一对后缀:目标文件的后缀和依赖目标(源文件)的后缀...原创 2019-04-09 20:59:09 · 16976 阅读 · 0 评论 -
#跟我一起写 Makefile# origin函数&shell函数
目录origin函数shell函数origin函数 origin函数不像其它的函数,他并不操作变量的值,他只是告诉你你的这个变量是哪里来的?其语法是:$(origin <variable>) 注意,<variable>是变量的名字,不应该是引用。所以你最好不要在<variable>中使用“$”字符。Origi...原创 2019-04-02 15:56:08 · 16838 阅读 · 0 评论 -
#跟我一起写 Makefile# foreach函数&if函数&call函数
目录foreach 函数if 函数call函数foreach 函数 foreach函数和别的函数非常的不一样。因为这个函数是用来做循环用的,Makefile中的foreach函数几乎是仿照于Unix标准Shell(/bin/sh)中的for语句,或是C-Shell(/bin/csh)中的foreach语句而构建的。它的语法是:$(foreach <v...原创 2019-04-02 14:48:38 · 17064 阅读 · 0 评论 -
#跟我一起写 Makefile# 显示命令&命令执行&命令出错
目录显示命令命令执行命令出错 每条规则中的命令和操作系统Shell的命令行是一致的。make会一按顺序一条一条的执行命令,每条命令的开头必须以[Tab]键开头,除非,命令是紧跟在依赖规则后面的分号后的。在命令行之间中的空格或是空行会被忽略,但是如果该空格或空行是以Tab键开头的,那么make会认为其是一个空命令。 我们在UNIX下可能会使用不同的She...原创 2019-03-30 11:33:02 · 17153 阅读 · 0 评论 -
#跟我一起写 Makefile# 嵌套执行make&定义命令包
目录嵌套执行make定义命令包嵌套执行make 在一些大的工程中,我们会把我们不同模块或是不同功能的源文件放在不同的目录中,我们可以在每个目录中都书写一个该目录的Makefile,这有利于让我们的Makefile变得更加地简洁,而不至于把所有的东西全部写在一个Makefile中,这样会很难维护我们的Makefile,这个技术对于我们模块编译和分段编译有着非常大的好处。...原创 2019-03-30 18:42:53 · 16386 阅读 · 0 评论 -
#跟我一起写 Makefile# 变量的基础&定变量中的变量
目录变量的基础定变量中的变量 在Makefile中的定义的变量,就像是C/C++语言中的宏一样,他代表了一个文本字串,在Makefile中执行的时候其会自动原模原样地展开在所使用的地方。其与C/C++所不同的是,你可以在Makefile中改变其值。在Makefile中,变量可以使用在“目标”,“依赖目标”,“命令”或是Makefile的其它部分中。 变量的...原创 2019-04-01 16:25:05 · 16712 阅读 · 0 评论 -
#跟我一起写 Makefile# 变量高级用法&追加变量值
目录变量高级用法追加变量值变量高级用法 这里介绍两种变量的高级使用方法,第一种是变量值的替换。我们可以替换变量中的共有的部分,其格式是“$(var:a=b)”或是“${var:a=b}”,其意思是,把变量“var”中所有以“a”字串“结尾”的“a”替换成“b”字串。这里的“结尾”意思是“空格”或是“结束符”。还是看一个示例吧:foo := a.o b.o c....原创 2019-04-01 17:42:36 · 15647 阅读 · 0 评论 -
#跟我一起写 Makefile# override指示符&多行变量&环境变量&目标变量&模式变量
目录override 指示符多行变量环境变量目标变量模式变量verride 指示符 如果有变量是通常make的命令行参数设置的,那么Makefile中对这个变量的赋值会被忽略。 如果你想在Makefile中设置这类参数的值,那么,你可以使用“override”指示符。其语法是:override <variable> = &...原创 2019-04-01 22:10:39 · 17024 阅读 · 0 评论 -
#跟我一起写 Makefile# 概述&关于程序的编译和链接
目录概述关于程序的编译和链接概述 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你...原创 2019-03-28 17:23:11 · 14744 阅读 · 0 评论 -
#跟我一起写 Makefile# Makefile介绍&规则
目录介绍规则介绍 make命令执行时,需要一个 Makefile 文件,以告诉make命令需要怎么样的去编译和链接程序。 首先,我们用一个示例来说明Makefile的书写规则。以便给大家一个感兴认识。这个示例来源于GNU的make使用手册,在这个示例中,我们的工程有8个C文件,和3个头文件,我们要写一个Makefile来告诉make命令如何编译和链接这...原创 2019-03-28 17:41:48 · 16247 阅读 · 0 评论 -
#跟我一起写 Makefile# 示例&如何工作&使用变量
目录一个示例make是如何工作的makefile中使用变量一个示例 正如前面所说的,如果一个工程有3个头文件,和8个C文件,我们为了完成前面所述的那三个规则,我们的Makefile应该是下面的这个样子的。edit : main.o kbd.o command.o display.o \insert.o search.o files.o utils.o ...原创 2019-03-28 21:21:00 · 16444 阅读 · 0 评论 -
#跟我一起写 Makefile# 函数的调用语法
目录函数的调用语法 在Makefile中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具有智能。make所支持的函数也不算很多,不过已经足够我们的操作了。函数调用后,函数的返回值可以当做变量来使用。函数的调用语法 函数调用,很像变量的使用,也是以“$”来标识的,其语法如下:$(<function> <argument...原创 2019-04-02 13:21:11 · 16110 阅读 · 0 评论 -
#跟我一起写 Makefile# 字符串处理函数&字符串函数实例
目录substpatsubststripfindstringfilterfilter-outsortwordwordlistwordsfirstword字符串函数实例subst$(subst <from>,<to>,<text>)名称:字符串替换函数——subst。功能:把字串<text>...原创 2019-04-02 14:06:18 · 17142 阅读 · 0 评论 -
#跟我一起写 Makefile# 文件名操作函数
目录dirnotdirsuffixbasenameaddprefix 下面我们要介绍的函数主要是处理文件名的。每个函数的参数字符串都会被当做一个或是一系列的文件名来对待。dir$(dir <names...>)名称:取目录函数——dir。功能:从文件名序列<names>中取出目录部分。目录部分是指最后一个反斜杠(“/”)...原创 2019-04-02 14:42:16 · 16488 阅读 · 0 评论 -
#跟我一起写 Makefile# 使用make更新函数库文件
目录函数库文件的成员函数库成员的隐含规则函数库文件的后缀规则注意事项 函数库文件也就是对Object文件(程序编译的中间文件)的打包文件。在Unix下,一般是由命令"ar"来完成打包工作。函数库文件的成员 一个函数库文件由多个文件组成。你可以以如下格式指定函数库文件及其组成:archive(member) 这个不是...原创 2019-04-09 21:04:51 · 16448 阅读 · 0 评论