Makefile 是一种编译管理工具,用于自动化构建程序。它通常包含一组规则,用于指定如何从源代码构建目标程序。以下是 Makefile 的基本规则:

1. target 规则

一个 target 规则用于指定如何生成目标文件。它的基本语法如下:

target: dependencies
    command1
    command2
    ...

其中 target 是生成的目标文件名,dependencies 是生成目标文件所需的依赖文件列表,command1command2 等是执行生成目标文件的命令列表。注意,在命令前面必须添加一个制表符。

例如,以下规则将从 main.cfoo.c 生成一个名为 program 的可执行文件:

program: main.c foo.c
    gcc -o program main.c foo.c

2. .PHONY 规则

.PHONY 规则用于指定一个假目标,它不对应任何实际的文件名。它的作用是表示一个命令,而不是文件的生成规则。例如,以下规则表示 clean 命令是一个假目标,它不对应任何实际的文件名:

.PHONY: clean
clean:
    rm -f program

3. $(var) 变量

$(var) 表示变量,它用于在规则中引用变量值。例如,以下规则使用 CFLAGS 变量指定编译选项:

CFLAGS=-Wall -O2

program: main.c foo.c
    gcc $(CFLAGS) -o program main.c foo.c

在上述规则中,$(CFLAGS) 表示编译选项 -Wall -O2

以上是 Makefile 的基本规则,它们可以组合使用以实现更复杂的构建过程。需要注意的是,Makefile 的语法是基于制表符的,而不是空格。因此,在编写 Makefile 时必须确保每个命令前面有一个制表符。