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

代码解释

  1. 设置变量 HOST_CROSS_COMPILE 的值:该行代码使用 ?= 操作符,如果 HOST_CROSS_COMPILE 变量未定义,则将其设置为 $(CROSS_COMPILE) 的值。
  2. 设置变量 TA_CROSS_COMPILE 的值:同理,如果 TA_CROSS_COMPILE 变量未定义,则将其设置为 $(CROSS_COMPILE) 的值。
  3. 声明目标 all 为伪目标PHONY 表示这是一个虚假的目标,并非实际的文件,只是一个标签,用于执行一些操作。
  4. 进入 host 目录执行 make 命令
    • $(MAKE) -C host 表示进入 host 目录执行 make 命令。
    • CROSS_COMPILE='$(HOST_CROSS_COMPILE)'HOST_CROSS_COMPILE 变量的值作为参数传递给 host 目录中的 make 命令。
    • --no-builtin-variables 表示禁用 make 命令的内置变量。
  5. 进入 ta 目录执行 make 命令
    • $(MAKE) -C ta 表示进入 ta 目录执行 make 命令。
    • CROSS_COMPILE='$(TA_CROSS_COMPILE)'TA_CROSS_COMPILE 变量的值作为参数传递给 ta 目录中的 make 命令。
    • LDFLAGS='' 表示设置 LDFLAGS 变量为空值。
  6. 声明目标 clean 为伪目标:同 all 目标。
  7. 进入 host 目录执行 clean 操作$(MAKE) -C host clean 表示进入 host 目录执行 clean 目标。
  8. 进入 ta 目录执行 clean 操作$(MAKE) -C ta clean 表示进入 ta 目录执行 clean 目标。

代码功能

这个 Makefile 脚本用于在一个项目中同时构建两个目录:hostta。其中 CROSS_COMPILE 变量用于指定交叉编译工具链,HOST_CROSS_COMPILETA_CROSS_COMPILE 变量分别为 hostta 目录指定不同的交叉编译工具链。

all 目标会分别进入 hostta 目录进行交叉编译。clean 目标会分别进入 hostta 目录清理构建产物。

该脚本使用 ?= 操作符设置变量的默认值,以便在未明确指定 CROSS_COMPILE 的情况下,使用相同的工具链进行编译。

Makefile 构建脚本解析:host & ta 目录交叉编译

原文地址: https://www.cveoy.top/t/topic/nmFH 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录