2.4. 使用 Make 管理更多代码
GNU make 程序(通常缩写为 make)是一个控制从源文件生成可执行文件的工具。make 自动确定复杂程序的哪个部分已更改,需要重新编译。make 使用名为 Makefile 的配置文件来控制构建程序的方式。
2.4.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 内容决定。
Makefile 详情
makefile 使用相对简单的语法来定义 变量 和 规则,这些变量和规则由一个 target 和一个 recipe 组成。目标指定执行规则后的输出是什么。带有 recipe 的行必须以 TAB 字符开头。
通常,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.4.2. Example:使用 Makefile 构建一个 C 程序 复制链接链接已复制到粘贴板!
按照本示例中的步骤,使用 Makefile 构建一个示例 C 程序。
流程
创建
hellomake目录:mkdir hellomake
$ mkdir hellomakeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 进入
hellomake目录:cd hellomake
$ cd hellomakeCopy 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
$ makeCopy to Clipboard Copied! Toggle word wrap Toggle overflow gcc -c -Wall hello.c -o hello.o gcc hello.o -o hello
$ gcc -c -Wall hello.c -o hello.o $ gcc hello.o -o helloCopy to Clipboard Copied! Toggle word wrap Toggle overflow 这将创建一个可执行文件
hello。运行可执行文件
hello:./hello
$ ./helloCopy to Clipboard Copied! Toggle word wrap Toggle overflow Hello, World!
Hello, World!Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行 Makefile 目标
clean以删除创建的文件:make clean
$ make cleanCopy to Clipboard Copied! Toggle word wrap Toggle overflow rm -rf hello.o hello
# rm -rf hello.o helloCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.4.3. make 的文档资源 复制链接链接已复制到粘贴板!
有关 make 的更多信息,请参阅以下列出的资源。
安装的文档
使用
man和info工具查看安装在系统上的手册页和信息页:查看 make 手册页:
man make
$ man makeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 查看构建信息页面:
info make
$ info makeCopy to Clipboard Copied! Toggle word wrap Toggle overflow
在线文档
- 由自由软件基金会主办的 GNU Make 手册