3.3. 使用 Makefile

要构建由多个源文件组成的复杂程序,使用名为 Makefile 的配置文件,该文件控制如何编译程序组件并构建最终可执行文件。 Makefile 也可以包含清理工作目录、安装和升级程序文件以及其它操作的说明。

make 自动使用当前目录中名为 GNUmakefilemakefileMakefile 的文件。要指定其他文件名,使用 -f 选项:

$ make -f make_file

描述 Makefile 语法的详细信息已超出本指南的范围。请参阅 GNU make (上游 GNU make manual)提供了 GNU make 实用程序、Makefile 语法及其用法的深入描述。

完整的 make manual 也以 Texinfo 格式作为安装的一部分提供。查看这个手册:

$ scl enable devtoolset-11 'info make'

例 3.2. 使用 Makefile 构建 C 程序

考虑以下名为 Makefile 的 Makefile 来构建 例 3.1 “使用 make 构建 C 计划” 中引入的简单 C 程序。Makefile 定义一些变量并指定四个 规则,它们由 目标 及其 配方 组成。请注意,带有方法的行必须以 TAB 字符开头:

CC=gcc
CFLAGS=-c -Wall
SOURCE=hello.c
OBJ=$(SOURCE:.c=.o)
EXE=hello

all: $(SOURCE) $(EXE)

$(EXE): $(OBJ)
        $(CC) $(OBJ) -o $@

.o: .c
        $(CC) $(CFLAGS) $< -o $@

clean:
        rm -rf $(OBJ) $(EXE)

要使用这个 Makefile 构建 hello.c 程序,请运行 make 工具程序:

$ scl enable devtoolset-11 'make'
gcc -c -Wall hello.c -o hello.o
gcc hello.o -o hello

这会在当前工作目录中创建一个新的对象文件 hello.o 和名为 hello 的新二进制文件。

要清理工作目录,请运行:

$ scl enable devtoolset-11 'make clean'
rm -rf hello.o hello

这会从工作目录中删除对象和二进制文件。