2.5. 使用 Make 管理更多代码
GNU make 工具通常缩写为 make,是一个控制从源文件生成可执行文件的工具。make 自动确定复杂程序的哪些部分已被更改,需要重新编译。make 使用名为 Makefile 的配置文件来控制程序的构建方式。
2.5.1. GNU make 和 Makefile 概述 复制链接链接已复制到粘贴板!
要从特定项目的源文件创建一个可用的表单(通常是可执行文件),请执行几个必要的步骤。记录操作及其顺序,以便稍后可重复这些操作。
Red Hat Enterprise Linux 包含 GNU make,这是专为此目的设计的构建系统。
- 什么是 GNU
make -
GNU
make读取 Makefile,其中包含描述构建过程的说明。Makefile 包含多个 规则,它们描述了满足带有特定操作(recipe)的某一条件(target)的方法。规则可以在层次上依赖于另一条规则。
运行不带任何选项的 make 可使其在当前的目录中查找 Makefile ,并尝试到达默认目标。实际的 Makefile 文件名可以是 Makefile 、makefile 和 GNUmakefile 中的一个。默认目标由 Makefile 内容决定。
使用特定目标运行 make :
$ make target
- Makefile 结构和语法
- makefile 使用相对简单的语法来定义 变量 和 规则,这些变量和规则由一个 target 和一个 recipe 组成。目标指定执行规则后的输出是什么。带有 recipe 的行必须以 TAB 字符开头。
通常,Makefile 包含用于编译源文件的规则、用于链接生成的目标文件的规则,以及充当层次结构顶部的入口点的目标。
- 基本 Makefile 示例
-
请考虑以下用来构建由单个文件
hello.c组成的 C 程序的Makefile。
all: hello
hello: hello.o
gcc hello.o -o hello
hello.o: hello.c
gcc -c hello.c -o hello.o
本例演示了要到达目标 all ,需要文件 hello。要获得 hello,您需要 hello.o (由 gcc 链接),后者是从 hello.c 创建的(由 gcc编译)。
目标 all 是默认目标,因为它是不是以句点(.)开头的第一个目标。当当前目录包含这个 Makefile 时,运行不带任何参数的 make 与运行 make all 一样。
- 使用变量进行高级 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 变量的行中。
2.5.2. 示例:使用 Makefile 构建 C 程序 复制链接链接已复制到粘贴板!
按照本示例中的步骤,使用 Makefile 构建一个示例 C 程序。
步骤
创建
hellomake目录:$ mkdir hellomake进入创建的目录:
$ cd hellomake创建包含以下内容的文件
hello.c:#include <stdio.h> int main(int argc, char *argv[]) { printf("Hello, World!\n"); return 0; }创建包含以下内容的文件
Makefile: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 recipe 行必须以制表符字符开头!从文档中复制上面的文本时,剪切和粘贴过程可能会粘贴空格而不是制表符。如果发生这种情况,请手动纠正问题。
运行
make:$ makegcc -c -Wall hello.c -o hello.o gcc hello.o -o hello这将创建一个可执行文件
hello。运行可执行文件
hello:$ ./helloHello, World!运行 Makefile 目标
clean以删除创建的文件:$ make cleanrm -rf hello.o hello
其他资源
2.5.3. make 文档 复制链接链接已复制到粘贴板!
有关 make 的更多信息,请参阅以下列出的资源。
- 安装的文档
-
使用
man实用程序查看系统中安装的手册页:
$ man make使用
info实用程序查看系统中安装的信息页面:$ info make
-
使用