- Makefile 教程
- Makefile - 首页
- Makefile - 为什么使用 Makefile?
- Makefile - 宏
- Makefile - 依赖关系
- Makefile - 规则
- Makefile - 后缀规则
- Makefile - 指令
- Makefile - 重新编译
- Makefile - 其他特性
- Makefile - 示例
- Makefile 快速指南
- Makefile - 快速指南
- Makefile - 有用资源
- Makefile - 讨论
Makefile - 其他特性
在本章中,我们将深入了解 Makefile 的其他各种特性。
Make 的递归使用
make 的递归使用意味着在 Makefile 中使用 make 作为命令。当您希望为构成更大系统的各种子系统创建单独的 Makefile 时,此技术非常有用。例如,假设您有一个名为“subdir”的子目录,该目录有自己的 Makefile,并且您希望包含目录的 Makefile 对子目录运行 make。您可以通过编写以下代码来实现:-
subsystem: cd subdir && $(MAKE) or, equivalently: subsystem: $(MAKE) -C subdir
您可以通过复制此示例来编写递归 make 命令。但是,您需要了解它们的工作原理以及原因,以及子 make 如何与顶级 make 相关联。
将变量传递给子 Make
顶级 make 的变量值可以通过环境通过显式请求传递给子 make。这些变量在子 make 中定义为默认值。除非您使用“-e”开关,否则您无法覆盖子 make Makefile 中使用的 Makefile 中指定的变量。
要传递或导出变量,make 会将变量及其值添加到环境中,以便运行每个命令。然后,子 make 使用环境来初始化其变量值表。
特殊变量 SHELL 和 MAKEFLAGS 始终导出(除非您取消导出它们)。如果您将 MAKEFILES 设置为任何值,则会导出它。
如果您想将特定变量导出到子 make,请使用 export 指令,如下所示:-
export variable ...
如果您想阻止导出变量,请使用 unexport 指令,如下所示:-
unexport variable ...
变量 MAKEFILES
如果定义了环境变量 MAKEFILES,则 make 会将其值视为要读取的其他 Makefile 的名称列表(用空格分隔),然后再读取其他 Makefile。这与 include 指令的工作方式非常相似:各种目录都会搜索这些文件。
MAKEFILES 的主要用途是在 make 的递归调用之间进行通信。
从不同目录包含头文件
如果您将头文件放在不同的目录中,并且您在不同的目录中运行 make,则需要提供头文件的路径。这可以通过在 Makefile 中使用 -I 选项来实现。假设 functions.h 文件位于 /home/tutorialspoint/header 文件夹中,其余文件位于 /home/tutorialspoint/src/ 文件夹中,则 Makefile 将按如下方式编写:-
INCLUDES = -I "/home/tutorialspoint/header" CC = gcc LIBS = -lm CFLAGS = -g -Wall OBJ = main.o factorial.o hello.o hello: ${OBJ} ${CC} ${CFLAGS} ${INCLUDES} -o $@ ${OBJS} ${LIBS} .cpp.o: ${CC} ${CFLAGS} ${INCLUDES} -c $<
追加更多文本到变量
通常,将更多文本添加到已定义变量的值中非常有用。您可以使用包含“+=”的行来实现,如下所示:-
objects += another.o
它获取变量 objects 的值,并在其后添加文本“another.o”,前面加一个空格,如下所示。
objects = main.o hello.o factorial.o objects += another.o
以上代码将 objects 设置为“main.o hello.o factorial.o another.o”。
使用“+=”类似于
objects = main.o hello.o factorial.o objects := $(objects) another.o
Makefile 中的续行
如果您不喜欢 Makefile 中的行太长,则可以使用反斜杠“\”来换行,如下所示:-
OBJ = main.o factorial.o \ hello.o is equivalent to OBJ = main.o factorial.o hello.o
从命令提示符运行 Makefile
如果您已准备好了名为“Makefile”的 Makefile,则只需在命令提示符下键入 make,它就会运行 Makefile 文件。但是,如果您为 Makefile 指定了其他名称,则使用以下命令:-
make -f your-makefile-name