GNU make中文手册:隐含规则与MapGIS10教程

需积分: 44 76 下载量 38 浏览量 更新于2024-08-10 收藏 2.1MB PDF 举报
"这篇教程是关于MapGIS 10的,重点讨论了Makefile中的隐含规则搜索。Makefile是构建软件项目时管理编译和链接过程的文件,它定义了目标文件及其依赖关系,以及如何从源文件生成目标文件的规则。在描述中提到了一个例子,解释了即使目标文件的依赖已经明确指定,如`foo.o: foo.p`,make程序仍然会搜索隐含规则,比如如果存在`foo.c`源文件,make会优先使用针对`.c`文件的隐含规则(通常为编译C源代码),即`cc`来编译,而不是按照`.p`文件的规则来执行。这是因为隐含规则列表中,`.c`文件的规则优先级高于`.p`文件的规则。此外,当需要为特定目标提供明确的构建步骤时,规则中必须包含命令行,且这些命令必须详细说明构建目标所需的操作。" 在GNUmake中,隐含规则是一种预设的构建规则,用于处理常见文件类型,例如编译C或C++源文件。当Makefile中没有显式指定某个目标的构建方法时,make会尝试应用这些隐含规则。例如,对于`.c`文件,隐含规则可能是先使用`gcc`或`g++`进行编译,然后用`ld`链接生成最终的目标文件。隐含规则的存在简化了Makefile的编写,因为用户不必为每一步都写出详细的命令。 隐含规则的搜索算法涉及到查找与目标文件类型匹配的规则,并根据文件扩展名的优先级顺序来决定使用哪一个。在这个例子中,由于`.c`文件的隐含规则在`.p`文件之前,所以即使`foo.o`依赖于`foo.p`,如果存在`foo.c`,make会优先考虑`foo.c`。 在Makefile中,可以使用`$(MAKEFILE_LIST)`变量来获取当前正在使用的Makefile列表,而`$(VPATH)`变量则可以设置搜索源文件的目录路径,允许make在多个目录中查找依赖文件。此外,`vpath`指令可以更精确地控制哪些类型的文件在哪些目录中进行搜索。 Makefile的规则通常包括目标、依赖和命令三部分,它们定义了如何从依赖文件构建目标文件。规则的语法包括通配符的使用,如`*`,可以匹配任何字符,但也会带来一些问题,例如可能会忽略某些文件。`wildcard`函数可以用来获取当前目录下符合特定模式的所有文件名。 除了显式规则,Makefile还包含隐含规则和伪目标。隐含规则是预定义的构建步骤,而伪目标如`.PHONY`则用于标记那些实际上并不对应物理文件的目标,确保它们总是被重新构建。 Makefile是构建流程的蓝图,通过定义规则和依赖关系,自动化软件项目的构建过程。隐含规则是其核心特性之一,它允许make程序灵活地处理各种源文件类型,而无需在Makefile中显式列出所有的构建步骤。在实际项目中,理解并熟练运用这些概念能有效提高构建效率。