手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>网站运营>建站经验>列表

如何调试make

来源:互联网 作者:west263.com 时间:2008-04-16
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

伪目标

通常我们能够说,目标的功能是从其他文档中创建一个文档。实际上并非总是如此。大部分 makefile 都至少有两条规则,他们从来都不会创建目标。请考虑下面的示例规则:


清单 5. 示例伪目标
all: hello goodbye fibonacci

            

这条规则会告诉 make —— 假如希望编译目标 all —— 首先要确保 hello、goodbye 和 fibonacci 都是最新的。然后,就什么也不做了。下面并没有提供指令。在这条规则完成之后,并不会创建名为 all 的文档。这个目标是一种假目标。在某些 make 变种中使用的技术术语称之为 “伪目标”。

伪目标是为了组织结构的目的而设计的,这在编写一个清楚的 makefile 时是种很不错的技术。举例来说,我们可能会经常看到下面的规则:


清单 6. 伪目标的灵活用法
build: clean all install

            

这指定了编译过程执行的操作顺序。

特别的目标和源

系统还定义了几个特别的目标,他们对 make 能够产生一些特别的影响,提供一种可配置的机制。具体的目标集对于每个实现来说都是不同的;其中最通用的一个是 .SUFFIXES 目标,他使用的源是一系列模式,添加在可识别的文档后缀列表中。这些特别目标并不会用作通用规则来把编译作为 makefile 中默认的第一条目标。

有些版本的 make 允许将特别源和给定目标的依赖性一起指定,例如 .IGNORE,他说明从编译这个目标所使用的命令中生成的错误都应该忽略,仿佛他们前面都有一个短线相同。这些标记的可移植性并不好,但是对于理解 makefile 来说却是必须的。

通用规则

在 make 中有一些隐式规则用来根据文档名后缀执行通用转换。举例来说,假如现在没有 makefile,能够创建一个名为 “hello.c” 的文档,并运行 make hello 命令:


清单 7. C 文档的隐式规则的例子
$ make hello

            cc -O2   -o hello hello.c

            

大型程式使用的 makefile 可能会简单地指定自己需要的对象模块清单(hello.o、world.o 等),然后为如何将 .c 文档转换成 .o 文档提供一条规则:


清单 8. 将 .c 文档转换成 .o 文档的规则
.c.o:

            cc $(CFLAGS) -c $<

            

实际上,大部分 make 工具都有一个早已内嵌到系统中的和此类似的规则;假如请求 make 来编译 file.o,而且现在已有 file.c 文档了,那么他就能够正确地完成编译过程。术语 "$<" 是个特别的预定义的 make 变量,代表某条规则的 “源”。这使我们能够使用一些 make 变量。

通用规则取决于 “后缀” 的声明,他然后会被识别为文档扩展名,而不是文档名的一部分。

变量

make 程式使用了一些变量来简化通用值的重用。最常见的值可能是 CFLAGS。有关 make 变量有一些东西应该澄清一下。他们不一定必须是环境变量。假如所给出的名字没有对应的 make 变量,那么 make 就会去检查环境变量;然而,这并意味着 make 变量会被导出为环境变量。优先规则很神秘;通常,他们的顺序从高到低依次为:

  1. 命令行变量配置
  2. 父 make 进程的 makefile 中的变量配置
  3. 本 make 进程的 makefile 中的变量配置
  4. 环境变量

因此,一个变量只有在没有在任何 makefile 或命令行中指定时,才会使用环境变量的配置(注意:父进程 makefile 变量有时候会传递下来,但不总会这样。正如可能已猜测到的相同,这些规则在各个 make 工具中会有所不同)。

人们在使用 make 时常常碰到的一个问题是变量被变量名的一部分替换掉了:举例来说,$CFLAGS 就被替换成了 “FLAGS”。因此要引用一个 make 变量,就请将他的名字放到括号中:$(CFLAGS)。否则,所得到的将是 $C,后面加上一个 FLAGS

很多变量都有一些特别的意义,这是正在使用他们的规则的一种功能。最常见的用法有:

  • $< —— 用来构建目标所使用的源文档
  • $*

    文章整理:西部数码--专业提供域名注册虚拟主机服务
    http://www.west263.com
    以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!