《跟我一起写Makefile》读书笔记(2)

来源:互联网 发布:全国各大高校校花知乎 编辑:程序博客网 时间:2024/06/10 20:00

四、Makefile综述

1、makefile里有什么?

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

(1)在 Makefile 中我们要定义一系列的变量,变量一般都是字符串;这个有点像C语言中的宏,当 Makefile 被执行时,其中的变量都会被扩展到相应的引用位置上。

(2)文件指示,包括三个部分

  • 一个是在一个 Makefile 中引用另一个 Makefile,就像 C 语言中的include 一样;
  • 另一个是指根据某些情况指定 Makefile 中的有效部分,就像 C 语言中的预编译#if 一样;
  • 还有就是定义一个多行的命令。 
(3)注释

  • Makefile 中只有行注释,和 UNIX 的 Shell 脚本一样,其注释是用“#”字符。
  • 如果要使用“#”字符,可以用反斜框进行转义,如:“\#”。

2、makefile的文件名

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

(2)大多数的 make 都支持“makefile”和“Makefile”这两种默认文件名;

(3)可以使用别的文件名来书写 Makefile,比如 : “ Make.Linux” ,“Make.Solaris”,“Make.AIX”等。

  • 如果要指定特定的 Makefile,你可以使用 make 的“-f”和“--file”参数,如:make -f Make.Linux 或 make --file Make.AIX。

3、引用其他Makefile文件

(1)例子如:(这里可以有空字符)include  foo.make  *.mk   $(bar) 

(2)细节注意

  • 被包含的文件会原模原样的放在当前文件的包含位置;
  • 在 include前面可以有一些空字符,但是绝不能是[Tab]键开始;
  • include和文件之间,可以用一个或多个空格隔开。

4、环境变量MAKEFILES

(1)如果你的当前环境中定义了环境变量 MAKEFILES,那么,make 会把这个变量中的值做一个类似于 include 的动作。

(2)它和 include不同的是,从这个环境变中引入的 Makefile 的“目标”不会起作用,如果环境变量中定义的文件发现错误,make 也会不理。

(3)这个变量中的值是其它的 Makefile,用空格分隔。

(4)建议不要使用这个环境变量,因为只要这个变量一被定义,那么当你使用 make 时, 所有的 Makefile 都会受到它的影响。


5、Makefile的工作方式

(1)读入所有的 Makefile;

(2)读入被 include 的其它 Makefile;

(3)初始化文件中的变量;

(4)推导隐晦规则,并分析所有规则;

(5)为所有的目标文件创建依赖关系链;

(6)根据依赖关系,决定哪些目标要重新生成;

(7)执行生成命令。


0 0
原创粉丝点击