OP-TEE Example: Hello World Makefile 解析
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): 删除OBJS和BINARY文件。
总结
Makefile 通过定义变量、目标和规则,控制了 OP-TEE Example: Hello World 项目的编译和构建过程。开发者可以根据需要修改 Makefile 文件,以适应不同的编译环境和构建需求。
参考
原文地址: https://www.cveoy.top/t/topic/nmHA 著作权归作者所有。请勿转载和采集!