第 18 章 使用 Make 管理更多代码


GNU Make 实用程序通常缩写为 Make,是控制从源文件生成可执行文件的工具。自动决定 复杂程序中的哪些部分已更改,需要重新编译。make 使用名为 Makefile 的配置文件来控制程序的构建方式。

18.1. GNU makeMakefile 概述

要从特定项目的源文件创建可用的表单(通常是可执行文件),请执行几个必要的步骤。记录操作及其顺序,以便稍后重复操作。

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 变量的行。

其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.