⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 makeuse.bak

📁 无线传感器网络中的经典例程
💻 BAK
📖 第 1 页 / 共 3 页
字号:

叫它提供了自动推导命令和文件的功能呢?来看看最新风格的makefile吧。 

 

objects = main.o kbd.o command.o display.o \ 

insert.o search.o files.o utils.o 

 

edit : $(objects) 

cc -o edit $(objects) 

 

$(objects) : defs.h 

kbd.o command.o files.o : command.h 

display.o insert.o search.o files.o : buffer.h 

 

.PHONY : clean 

clean : 

rm edit $(objects) 

 

这种风格,让我们的makefile变得很简单,但我们的文件依赖关系就显得有点凌乱了。鱼
 

和熊掌不可兼得。还看你的喜好了。我是不喜欢这种风格的,一是文件的依赖关系看不清
 

楚,二是如果文件一多,要加入几个新的.o文件,那就理不清楚了。 

 

 

七、清空目标文件的规则 

 

每个Makefile中都应该写一个清空目标文件(.o和执行文件)的规则,这不仅便于重编译
 

,也很利于保持文件的清洁。这是一个“修养”(呵呵,还记得我的《编程修养》吗)。
 

一般的风格都是: 

 

clean: 

rm edit $(objects) 

 

更为稳健的做法是: 

 

.PHONY : clean 

clean : 

-rm edit $(objects) 

 

前面说过,.PHONY意思表示clean是一个“伪目标”,。而在rm命令前面加了一个小减号的
 

意思就是,也许某些文件出现问题,但不要管,继续做后面的事。当然,clean的规则不要
 

放在文件的开头,不然,这就会变成make的默认目标,相信谁也不愿意这样。不成文的规
 

矩是——“clean从来都是放在文件的最后”。 

 

 

上面就是一个makefile的概貌,也是makefile的基础,下面还有很多makefile的相关细节
 

,准备好了吗?准备好了就来。 

 

Makefile 总述 

——————— 

 

一、Makefile里有什么? 

 

Makefile里主要包含了五个东西:显式规则、隐晦规则、变量定义、文件指示和注释。 

 

 


1、显式规则。显式规则说明了,如何生成一个或多的的目标文件。这是由Makefile的书写
 

者明显指出,要生成的文件,文件的依赖文件,生成的命令。 

 

2、隐晦规则。由于我们的make有自动推导的功能,所以隐晦的规则可以让我们比较粗糙地
 

简略地书写Makefile,这是由make所支持的。 

 

3、变量的定义。在Makefile中我们要定义一系列的变量,变量一般都是字符串,这个有点
 

你C语言中的宏,当Makefile被执行时,其中的变量都会被扩展到相应的引用位置上。 

 


4、文件指示。其包括了三个部分,一个是在一个Makefile中引用另一个Makefile,就像C
 

语言中的include一样;另一个是指根据某些情况指定Makefile中的有效部分,就像C语言
 

中的预编译#if一样;还有就是定义一个多行的命令。有关这一部分的内容,我会在后续的
 

部分中讲述。 

 

5、注释。Makefile中只有行注释,和UNIX的Shell脚本一样,其注释是用“#”字符,这个
 

就像C/C++中的“//”一样。如果你要在你的Makefile中使用“#”字符,可以用反斜框进
 

行转义,如:“\#”。 

 

最后,还值得一提的是,在Makefile中的命令,必须要以[Tab]键开始。 

 

 

二、Makefile的文件名 

 

默认的情况下,make命令会在当前目录下按顺序找寻文件名为“GNUmakefile”、“makef
 

ile”、“Makefile”的文件,找到了解释这个文件。在这三个文件名中,最好使用“Mak
 

efile”这个文件名,因为,这个文件名第一个字符为大写,这样有一种显目的感觉。最好
 

不要用“GNUmakefile”,这个文件是GNU的make识别的。有另外一些make只对全小写的“
 

makefile”文件名敏感,但是基本上来说,大多数的make都支持“makefile”和“Makefi
 

le”这两种默认文件名。 

 

当然,你可以使用别的文件名来书写Makefile,比如:“Make.Linux”,“Make.Solaris
 

”,“Make.AIX”等,如果要指定特定的Makefile,你可以使用make的“-f”和“--file
 

”参数,如:make -f Make.Linux或make --file Make.AIX。 

 

 

三、引用其它的Makefile 

 

在Makefile使用include关键字可以把别的Makefile包含进来,这很像C语言的#include,
 

被包含的文件会原模原样的放在当前文件的包含位置。include的语法是: 

 

include <filename> 

 

filename可以是当前操作系统Shell的文件模式(可以保含路径和通配符) 

 

在include前面可以有一些空字符,但是绝不能是[Tab]键开始。include和<filename>可以
 

用一个或多个空格隔开。举个例子,你有这样几个Makefile:a.mk、b.mk、c.mk,还有一
 

个文件叫foo.make,以及一个变量$(bar),其包含了e.mk和f.mk,那么,下面的语句: 

 

 


include foo.make *.mk $(bar) 

 

等价于: 

 

include foo.make a.mk b.mk c.mk e.mk f.mk 

 

make命令开始时,会把找寻include所指出的其它Makefile,并把其内容安置在当前的位置
 

。就好像C/C++的#include指令一样。如果文件都没有指定绝对路径或是相对路径的话,m
 

ake会在当前目录下首先寻找,如果当前目录下没有找到,那么,make还会在下面的几个目
 

录下找: 

 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -