Makefile 构建脚本解析:host & ta 目录交叉编译
Makefile 构建脚本解析:host & ta 目录交叉编译
HOST_CROSS_COMPILE ?= $(CROSS_COMPILE)
TA_CROSS_COMPILE ?= $(CROSS_COMPILE)
.PHONY: all
all:
$(MAKE) -C host CROSS_COMPILE='$(HOST_CROSS_COMPILE)' --no-builtin-variables
$(MAKE) -C ta CROSS_COMPILE='$(TA_CROSS_COMPILE)' LDFLAGS=''
.PHONY: clean
clean:
$(MAKE) -C host clean
$(MAKE) -C ta clean
代码解释
- 设置变量 HOST_CROSS_COMPILE 的值:该行代码使用
?=操作符,如果HOST_CROSS_COMPILE变量未定义,则将其设置为$(CROSS_COMPILE)的值。 - 设置变量 TA_CROSS_COMPILE 的值:同理,如果
TA_CROSS_COMPILE变量未定义,则将其设置为$(CROSS_COMPILE)的值。 - 声明目标 all 为伪目标:
PHONY表示这是一个虚假的目标,并非实际的文件,只是一个标签,用于执行一些操作。 - 进入 host 目录执行 make 命令:
$(MAKE) -C host表示进入host目录执行 make 命令。CROSS_COMPILE='$(HOST_CROSS_COMPILE)'将HOST_CROSS_COMPILE变量的值作为参数传递给host目录中的 make 命令。--no-builtin-variables表示禁用 make 命令的内置变量。
- 进入 ta 目录执行 make 命令:
$(MAKE) -C ta表示进入ta目录执行 make 命令。CROSS_COMPILE='$(TA_CROSS_COMPILE)'将TA_CROSS_COMPILE变量的值作为参数传递给ta目录中的 make 命令。LDFLAGS=''表示设置LDFLAGS变量为空值。
- 声明目标 clean 为伪目标:同
all目标。 - 进入 host 目录执行 clean 操作:
$(MAKE) -C host clean表示进入host目录执行clean目标。 - 进入 ta 目录执行 clean 操作:
$(MAKE) -C ta clean表示进入ta目录执行clean目标。
代码功能
这个 Makefile 脚本用于在一个项目中同时构建两个目录:host 和 ta。其中 CROSS_COMPILE 变量用于指定交叉编译工具链,HOST_CROSS_COMPILE 和 TA_CROSS_COMPILE 变量分别为 host 和 ta 目录指定不同的交叉编译工具链。
all 目标会分别进入 host 和 ta 目录进行交叉编译。clean 目标会分别进入 host 和 ta 目录清理构建产物。
该脚本使用 ?= 操作符设置变量的默认值,以便在未明确指定 CROSS_COMPILE 的情况下,使用相同的工具链进行编译。
原文地址: https://www.cveoy.top/t/topic/nmFH 著作权归作者所有。请勿转载和采集!