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
$ make target
- Makefile 结构和语法
- makefile 使用相对简单的语法来定义 变量 和 规则,这些变量和规则由一个 target 和一个 recipe 组成。目标指定执行规则后的输出是什么。带有 recipe 的行必须以 TAB 字符开头。
通常,Makefile 包含用于编译源文件的规则、用于链接生成的目标文件的规则,以及充当层次结构顶部的入口点的目标。
- 基本 Makefile 示例
-
请考虑以下用来构建由单个文件
hello.c
组成的 C 程序的Makefile
。
本例演示了要到达目标 all
,需要文件 hello
。要获得 hello
,您需要 hello.o
(由 gcc
链接),后者是从 hello.c
创建的(由 gcc
编译)。
目标 all
是默认目标,因为它是不是以句点(.)开头的第一个目标。当当前目录包含这个 Makefile
时,运行不带任何参数的 make
与运行 make all
一样。
- 使用变量进行高级 Makefile
- 更为典型的 Makefile 使用变量来概括步骤,并添加一个目标"clean" - 删除除源文件以外的任何内容。
向此类 Makefile 添加更多源文件只需要将它们添加到定义了 SOURCE 变量的行中。
2.5.2. 示例:使用 Makefile 构建 C 程序 复制链接链接已复制到粘贴板!
按照本示例中的步骤,使用 Makefile 构建一个示例 C 程序。
步骤
创建一个
hellomake
目录,并进到此目录:mkdir hellomake cd hellomake
$ mkdir hellomake $ cd hellomake
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建包含以下内容的文件
hello.c
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建包含以下内容的文件
Makefile
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要Makefile recipe 行必须以制表符字符开头!从文档中复制上面的文本时,剪切和粘贴过程可能会粘贴空格而不是制表符。如果发生这种情况,请手动纠正问题。
运行
make
:make
$ make gcc -c -Wall hello.c -o hello.o gcc hello.o -o hello
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这将创建一个可执行文件
hello
。运行可执行文件
hello
:./hello
$ ./hello Hello, World!
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行 Makefile 目标
clean
以删除创建的文件:make clean
$ make clean rm -rf hello.o hello
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
其他资源
2.5.3. make 文档 复制链接链接已复制到粘贴板!
有关 make
的更多信息,请参阅以下列出的资源。
- 安装的文档
-
使用
man
和info
工具查看安装在系统上的手册页和信息页:
man make info make
$ man make $ info make
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
使用