linux0.12-3-6

[89页]

3-6 Make程序和Makefile文件

1、 大型项目需要用Makefile来控制;
2、 make是个工具程序;
3、 需要先编写一个名称为Makefile(或makefile)的文本文件提供make执行时使用。

2-6-1 Makefile文件内容

五种元素:

1、 显式规则

用于指定何时以及怎样重新编译一个或多个被称作规则的目标的文件。
规则中明确列出了目标所依赖的被称为目标的先决条件(或依赖)的
其他文件,同时也会给出用于创建或更新目标的命令

2、 隐含规则

根据目标和对象的名称来确定何时和如何重新编译一个或多个被称作规则的目标的文件。
这种规则描述了目标是如何依赖于与目标名称相类似的文件,并会给出用于创建或更新这样的一个目标文件。

3、 变量定义

用于在一行上为一个变量定义一个文本字符串。该变量可在后续语句中被替换。
例如后面例子中的变量objects定义了所有.o文件的列表。

4、 指示符

用于指示其在读取Makefil文件时执行的特定操作。这些操作可包括读取另一个makefil文件;
确定使用或忽略makefile文件的某部分内容和从包含多行的字符串中定义一个变量。

5、 注释信息

以"#"代表注释;
Makefile文件中以制表符TAB开始的一行命令脚本被完整地被传递给shell

3-6-2 Makefile文件中的规则

target(目标):prerequisites(先决条件)
command(命令)

3-6-3 Makefile文件示例

自己可以敲一次。

3-6-4 make处理Makefile文件的方式

简单总结:如果源文件变化,对应的目标将会更新;

3-6-5 Makefile中的变量

1、 对于Makefile,典型的做法是定义一个名称为objects、OBJECTS、objs、
或者OBJ的变量来表示所有.o目标的列表。我们通常会在Makefile中使用如下
一行来定义一个变量objects:
objects = main.o kbd.o command.o display.o insert.o search.o files.o utils.objects
此后,在每一处需要列出.o目标文件表的地方都可以通过写上"$(objects)"来替换变量的值。

3-6-6 让make自动推断命令

1、 举一个自动推断的例子
“cc -c main.c -o main.o”
自动推到 “cc -c main.c”

3-6-7 隐含规则中的自动变量

1、 自动变量" " 的值标识规则的所有先决条件,包括它们所处目录的名称; 2 、 " ^"的值标识规则的所有先决条件,包括它们所处目录的名称; 2、 " "的值标识规则的所有先决条件,包括它们所处目录的名称;2"<"的值表示规则中的第一个先决条件;
3、 "$@"表示目标对象;
请参考make手册
4、 make程序定义隐含规则的老式方法
.c.s:
$(CC) $(CFLAGS)
-nostdinc -Iinclude -S -o $*.s $<

你可能感兴趣的:(linux0.12,linux)