Makefile一些规则
一、Makefile 的规则
在讲述这个 Makefile 之前,还是让我们先来粗略地看一看Makefile 的规则。
target ... : prerequisites ...
command
...
...
target 也就是一个目标文件,可以是Object File,也可以是执行文件。还可以是一个标
签(Label),对于标签这种特性,在后续的“伪目标”章节中会有叙述。
prerequisites 就是,要生成那个target 所需要的文件或是目标。
command 也就是make 需要执行的命令。(任意的Shell 命令)
这是一个文件的依赖关系,也就是说,target 这一个或多个的目标文件依赖于prerequisites
中的文件,其生成规则定义在command 中。说白一点就是说,prerequisites 中如果有一个以
上的文件比target 文件要新的话,command 所定义的命令就会被执行。这就是Makefile 的
规则。也就是Makefile 中最核心的内容。
二、通过make命令即可执行Makefile或makefile文件。
三、在makefile中可以使用变量,其变量就是一个字符串,可以理解成C语言中的宏
比如: object = main.o hello.o
于是,我们就可以很方便地在我们的 makefile 中以“$(objects)”的方式来使用这个变量了,
四、makefile中的命令以tab按键开头
五、:= 这种方法,前面的变量不能使用后面的变量,只能使用前面已定义好了的变量。
六、还有一个比较有用的操作符是“?=”,先看示例:
FOO ?= bar
其含义是,如果 FOO 没有被定义过,那么变量FOO 的值就是“bar”,如果FOO 先前被定
义过,那么这条语将什么也不做,其等价于:
ifeq ($(origin FOO), undefined)
FOO = bar
endif
七、我们可以使用“+=”操作符给变量追加值,如:
objects = main.o foo.o bar.o utils.o
objects += another.o