【GUN make项目管理】学习笔记

    2014-07-08 00:00     0 条评论

第一章 如何编写一个简单的makefile

make程序可让“将源代码转换成可执行文件”之类的例行工作自动化。相较于脚本,make的优点是:你可以把程序中各元素之间的关系告诉make,然后make会根据这些关系和时间戳判断进行哪些步骤,以产生你所需要的程序。make定义了一种语言,可以用来描述源文件、中间文件以及可执行文件之间的关系,它还提供了一些功能,用来管理各种候选配置,实现可重用程序库的细节以及让用户以自定义宏将过程参数化,简而言之,make常被视为开发过程中的核心,因为它为应用程序的组件以及这些组件的搭配方式提供了一个可依循的准则。

第二章 规则

具体规则

通配符

假想工作目标

.PHONY : clean
clean :
        rm -f  *.o lexer.c

标准的假想工作目标

all 执行编译应用程序的所有工作
install 从已编译的二进制文件进行应用程序的安装
clean 将产生自源代码的二进制文件删除
distclean 删除编译过程中产生的任何文件(除了二进制文件,也包含configure所产生的Makefile)
TAGS 建立可供编辑器使用的标记表
info 从Textinfo源码来创建GNU info文件
check 执行与应用程序相关的任何调试

空工作目标

变量

自动变量

当规则相符时,make回设定自动变量。通过他们,你可以去用工作目标以及必要条件中的元素,所以你不必指明任何文件名称。要避免重复,自动变量就相当有用。

下面是7个“核心”的自动变量

$@ : 工作目标的文件名
$% :  档案文件成员,结构中的文件名元素
$< : 第一个必要条件的文件名
$? : 时间戳在工作目标(的时间戳)之后的所有必要条件,并以空格隔开
$^ : 所有必要条件的文件名,并以空格隔开这些文件名。这份列表已删掉重复的文件名,因为对于大多数的应用而言,比如编译、复制等,并不会用到重复的文件
$+ :如同$^,但是包含重复的文件名。此变量会在特殊的状况下被创建,比如将自变量传递给链接器(linker)时,重复的值是有意义的。
$* :工作目标的主文件名,一个文件名称是由2个部分组成:主文件名和扩张文件名。

以VPATH和vpath来查找文件

VPATH: diretory1 directory2 ...

如果VPATH在多个目录中出现同名的文件,则make只会截取第一个被找到的文件。这时可以使用vpath指令。

path pattern directory-list

eg:

vpath %.l %.c src
path %.h include


模式规则

所有内置规则都是模式规则的实例。

模式规则中的%大体上等效于unix shell中的*,它可以代表任意多个字符。百分比字符可以放在模式的任何地方,不过只能出现一次。

静态模式规则

静态模式规则只能用在特定的工作目标上。

$(OBJECTS): %.o : %.c
    $(CC) =c $(CFLAGS) $< -o $@

此规则和一般模式的唯一差别是开头的$(OBJECTS):规范。这将使得该规则只能应用在$(OBJECTS)变量中所列举的文件上。

后缀规则

隐含规则

管理程序库

#使用ar命令创建libcounter.a程序库,其中r表示replace ,v表示verbose
$ ar rv libcounter.a counter.o

第三章 变量和宏

变量的用途

变量的类型

  1. 经简单扩展的变量(simple expanded variable)
  2. 以及经递归扩展的变量。

何时扩展变量

工作目标与模式的专属变量

变量来自何处

本文地址:https://www.yhawaii.net/38.html
版权声明:本文为原创文章,版权归  所有,欢迎分享本文,转载请保留出处!

 发表评论


表情