OP-TEE Example: Hello World Makefile 解析

本指南详细解析 OP-TEE Example: Hello World 项目中的 Makefile 文件,帮助开发者理解 Makefile 的工作原理以及 OP-TEE 开发环境的构建过程。

1. 变量定义

  • OBJS = main.o: 定义了一个变量 OBJS,其值为 main.o,表示编译所需的源文件目标文件。
  • CFLAGS += -Wall -I../ta/include -I$(TEEC_EXPORT)/include -I./include: 将编译参数 -Wall 和三个 include 路径添加到已有的 CFLAGS 变量中。
    • -Wall: 启用所有编译器警告。
    • -I../ta/include: 添加 ../ta/include 目录到 include 搜索路径。
    • -I$(TEEC_EXPORT)/include: 添加 $(TEEC_EXPORT)/include 目录到 include 搜索路径。
    • -I./include: 添加当前目录下的 include 目录到 include 搜索路径。
  • LDADD += -lteec -L$(TEEC_EXPORT)/lib: 将 -lteec-L$(TEEC_EXPORT)/lib 添加到已有的 LDADD 变量中。
    • -lteec: 链接 libteec.a 库文件。
    • -L$(TEEC_EXPORT)/lib: 添加 $(TEEC_EXPORT)/lib 目录到库文件搜索路径。
  • BINARY = optee_example_hello_world: 定义了一个变量 BINARY,其值为 optee_example_hello_world,表示最终生成的可执行文件名称。

2. 目标定义

  • .PHONY: all: 声明 all 是一个伪目标,不是一个文件。
  • all: $(BINARY): 声明 all 目标依赖于 BINARY 目标,即 all 目标需要在 BINARY 目标构建完成后才能执行。
  • .PHONY: clean: 声明 clean 是一个伪目标,不是一个文件。
  • clean:: 声明 clean 目标,用于删除构建过程中产生的文件。

3. 规则定义

  • $(BINARY): $(OBJS): 声明 BINARY 目标依赖于 OBJS 目标,即 BINARY 目标需要在 OBJS 目标构建完成后才能执行。
  • $(CC) -o $@ $< $(LDADD): 使用 CC 变量定义的编译器将 OBJS 编译为 BINARY
    • -o $@: 表示输出文件名为当前目标,$@ 表示当前目标的文件名。
    • $<: 表示当前目标所依赖的第一个文件(这里为 OBJS)。
    • $(LDADD): 表示链接的库文件。
  • %.o: %.c: 声明以 .c 结尾的文件都可以使用这个规则进行编译。
    • $<: 表示依赖的第一个文件。
    • $@: 表示当前目标的文件名。
    • -c: 表示只编译不链接。

4. 清理规则

  • rm -f $(OBJS) $(BINARY): 删除 OBJSBINARY 文件。

总结

Makefile 通过定义变量、目标和规则,控制了 OP-TEE Example: Hello World 项目的编译和构建过程。开发者可以根据需要修改 Makefile 文件,以适应不同的编译环境和构建需求。

参考

OP-TEE Example: Hello World Makefile 解析

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

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