第 18 章 使用 Make 管理更多代码
GNU Make 实用程序通常缩写为 Make,是控制从源文件生成可执行文件的工具。自动决定 复杂程序中的哪些部分已更改,需要重新编译。make 使用名为 Makefile 的配置文件来控制程序的构建方式。
18.1. GNU make
和 Makefile
概述
要从特定项目的源文件创建可用的表单(通常是可执行文件),请执行几个必要的步骤。记录操作及其顺序,以便稍后重复操作。
Red Hat Enterprise Linux 包含 GNU make
,这是专为此目的设计的构建系统。
先决条件
- 了解编译和链接的概念
GNU make
GNU make
读取 Makefile,其中包含描述构建过程的说明。Makefile 包含多个 规则,它们描述通过特定操作(方法)满足特定条件(目标)的方式。规则可以分层依赖于另一条规则。
运行不带任何选项的 make
即可在当前目录中查找 Makefile 并尝试访问默认目标。实际的 Makefile 文件名可以是 Makefile、
和 makefile
GNUmakefile
之一。默认目标由 Makefile 内容决定。
Makefile 详情
makefile 使用相对简单的语法来定义 变量 和 规则,这些变量和规则由一个 target 和一个 recipe 组成。如果执行规则,则目标指定输出。具有配方的行必须以 tab 字符开头。
通常,Makefile 包含用于编译源文件的规则、用于链接结果对象文件的规则,以及充当层次结构顶部的入口点的目标。
请考虑以下 Makefile
用于构建由单个文件 hello.c
组成的 C 程序。
all: hello hello: hello.o gcc hello.o -o hello hello.o: hello.c gcc -c hello.c -o hello.o
这将指定,要访问 所有目标
,需要 hello
文件。要获得 hello
,您需要 hello.o
(由 gcc 链接
),后者从 hello.c
创建(由 gcc
编译)。
目标 all
是默认目标,因为它是不是以句点开头的第一个目标。如果当前目录包含这个 Makefile
,则不带任何参数运行
会完全运行 make。
make
典型的 Makefile
较典型的 Makefile 使用变量来常规调整步骤,并添加目标"clean",这将删除除源文件以外的所有对象。
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 添加更多源文件需要将它们添加到定义 SOURCE 变量的行。
其他资源
- GNU make:简介 - 2 Makefile 简介
- 第 15 章 使用 GCC 构建代码