单,但我们的文件依赖关系就显得有点凌乱了。
鱼和熊掌不可兼得。
还看你的喜好了。
我是不喜欢这种风格的,一是文件的依赖关系看不清楚,二是如果文件一多,要加入几个新的.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” 、 “makefile”“Makefile”的文件,找到了解释这个文件。
在这三个文件名中,最好使用“Makefile”这个文件名,因为,这个文件名第一个字符为大写,这样有一种显目的感觉。
最好不要用 , 有另外一些 make 只对全小写的“GNUmakefile”这个文件是 GNU 的 make 识别的。
“makefile”文件名敏感,但是基本上来说,大多数的 make 都支持“makefile”和“Makefile”这两种默认文件名。
当然,你可以使用别的文件名来书写 Makefile,比如: , “Make.Linux” “Make.Solaris” ,“Make.AIX”等,如果要指定特定的 Makefile,你可以使用 make 的“-f”和“--file”参数,如:make -f Make.Linux 或 make --file Make.AIX。
三、引用其它的 Makefile 这很像 C 语言的include,在 Makefile 使用 include 关键字可以把别的 Makefile 包含进来,被包含的文件会原模原样的放在当前文件的包含位置。
include 的语法是: include ltfilenamegt filename 可以是当前操作系统 Shell 的文件模式(可以保含路径和通配符)在 include 前面可以有一些空字符,但是绝不能是Tab键开始。
include 和ltfilenamegt可以用一个或多个空格隔开。
举个例子,你有这样几个 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 会把找寻 include 所指出的其它 Makefile,make 命令开始时, 并把其内容安置.
上一篇:
【精品】CBX开发人员手册
下一篇:
台湾海峡台风浪的数值模拟