文件名称:指定目标-算法引论:一种创造性方法---高清版
文件大小:964KB
文件格式:PDF
更新时间:2024-06-23 16:09:23
Makefile 陈皓
三、指定目标 一般来说,make 的 终目标是 makefile 中的第一个目标,而其它目标一般是由这个目 标连带出来的。这是 make 的默认行为。当然,一般来说,你的 makefile 中的第一个目标是 由许多个目标组成,你可以指示 make,让其完成你所指定的目标。要达到这一目的很简单, 需在 make 命令后直接跟目标的名字就可以完成(如前面提到的“make clean”形式) 任何在 makefile 中的目标都可以被指定成终极目标,但是除了以“-”打头,或是包含 了“=”的目标,因为有这些字符的目标,会被解析成命令行参数或是变量。甚至没有被我 们明确写出来的目标也可以成为 make 的终极目标,也就是说,只要 make 可以找到其隐含规 则推导规则,那么这个隐含目标同样可以被指定成终极目标。 有一个 make 的环境变量叫“MAKECMDGOALS”,这个变量中会存放你所指定的终极目标 的列表,如果在命令行上,你没有指定目标,那么,这个变量是空值。这个变量可以让你使 用在一些比较特殊的情形下。比如下面的例子: sources = foo.c bar.c ifneq ( $(MAKECMDGOALS),clean) include $(sources:.c=.d) endif 基于上面的这个例子,只要我们输入的命令不是“make clean”,那么 makefile 会自 动包含“foo.d”和“bar.d”这两个 makefile。 使用指定终极目标的方法可以很方便地让我们编译我们的程序,例如下面这个例子: .PHONY: all all: prog1 prog2 prog3 prog4 从这个例子中,我们可以看到,这个 makefile 中有四个需要编译的程序——“prog1”, “prog2”, “prog3”和 “prog4”,我们可以使用“make all”命令来编译所有的目标 (如果把 all 置成第一个目标,那么只需执行“make”),我们也可以使用“make prog2” 来单独编译目标“prog2”。 即然 make 可以指定所有 makefile 中的目标,那么也包括“伪目标”,于是我们可以根 据这种性质来让我们的 makefile 根据指定的不同的目标来完成不同的事。在 Unix 世界中, 软件发布时,特别是 GNU 这种开源软件的发布时,其 makefile 都包含了编译、安装、打包 等功能。我们可以参照这种规则来书写我们的 makefile 中的目标。 第 55 页共 78 页 2005 年 10 月 14 日整理:祝冬华