上篇文章:【ARM 嵌入式 编译系列 2.1 -- GCC 编译参数学习】
下篇文章:【ARM 嵌入式 编译系列 2.3 -- GCC 中指定 ARMv8-M 的 Thumb 指令集参数详细介绍】
文章目录
编译参数介绍
通常我们在 OS 启动的时候我们可以在串口log中看到 当前使用的镜像的编译时间、是谁编译的,当前镜像是基于哪个 git commit编译的?我们如何在编译过程中添加这些参数呢?
通过下面命令获取当前时间:
powershell
$ date +"%Y-%m-%d-%H-%M-%S"
2022-12-20-10-29-31
通过下面命令获取当前用户:
shell
$ whoami
CodingCos
通过下面命令获取当前 git id
powershell
$ git log -1 --pretty=format:'%H'
9c7085ed92eeeac5836f540511c65e5190975d46
我们只需要将上面获取到的值在 Makefile 中赋值给相应的变量, 然后使用 export
将其从Makefile导出到由Makefile启动的子进程的环境中即可,如下:
powershell
COMPILE_TIME_DATE := $(shell date +"%Y-%m-%d-%H-%M-%S")
COMPILE_USER_NAME := $(shell whoami)
COMPILE_COMMIT_ID := $(shell git log -1 --pretty=format:'%H')
export COMPILE_TIME_DATE
export COMPILE_USER_NAME
export COMPILE_COMMIT_ID
在编的时候将上面定义的参数以宏的形式进行定义, 如下:
powershell
PARCFLAGS += -DCOMPILE_TIME_DATE=$(COMPILE_TIME_DATE) -DCOMPILE_USER_NAME=$(COMPILE_USER_NAME) -DCOMPILE_COMMIT_ID=$(COMPILE_COMMIT_ID) \
在编译的时候使用 参数 OBJCFLAGS
即可,如下:
kotlin
ifeq ($(CROSS_COMPILE), )
CROSS_COMPILE = arm-none-eabi-
endif
CC = $(CROSS_COMPILE)gcc
LD = $(CROSS_COMPILE)ld
GDB = $(CROSS_COMPILE)gdb
OBJDUMP = $(CROSS_COMPILE)objdump
OBJCOPY = $(CROSS_COMPILE)objcopy
READELF = $(CROSS_COMPILE)readelf
all:
%.o: %.c
@echo -e "\t c " CC $(CFLAGS) $< -o $@
@$(CC) $(PARCFLAGS) $< -o $@
%.o: %.S
@echo -e "\t s " CC $(OBJCFLAGS) $< -o $@
@$(CC) $(OBJCFLAGS) $< -o $@
上篇文章:【ARM 嵌入式 编译系列 2.1 -- GCC 编译参数学习】
下篇文章:【ARM 嵌入式 编译系列 2.3 -- GCC 中指定 ARMv8-M 的 Thumb 指令集参数详细介绍】