Makefile 编写规则

make: 更有效的运行和编译你的程序

基础示例

创建如下Makefile文件:

1
2
say_hello:
echo "Hello World"

执行make,会有如下输出:

1
2
3
$ make
echo "Hello World"
Hello World

当 make 被执行时,整条指令 echo “Hello World” 都被显示出来,之后才是真正的执行结果。如果不希望指令本身被打印处理,需要在 echo 前添加 @。

1
2
say_hello:
@echo "Hello World"

在上面的例子中,“say_hello” 类似于其他编程语言中的函数名。这被称之为 目标(target)。在该目标之后的是预置条件或依赖。为了简单起见,我们在这个示例中没有定义预置条件。echo ‘Hello World’ 命令被称为 步骤(recipe)。这些步骤基于预置条件来实现目标。目标、预置条件和步骤共同构成一个规则。

总结一下,一个典型的规则的语法为:

1
2
目标: 预置条件 or 依赖
步骤

相关语法

  • .PHONY[虚伪的] 用来定义这些不是文件的目标。(因为目标理论上是一个文件名,即下面的步骤是要生成这个文件的,虽然实际使用上不这样,这时,如果文件夹下有一个同名的文件就会报错,.PHONY定义虚拟的目标)
  • .DEFAULT_GOAL:执行make时默认执行第一个目标,可以使用设置.DEFAULT_GOAL来修改默认的目标,也可以使用.DEFAULT_GOAL := all 来执行全部。
  • Makefile支持变量定义