当前位置: 首页 > article >正文

【ARM 嵌入式 编译系列 2.2 -- 如何在Makefile 中添加编译时间 | 编译作者| 编译 git id】


请阅读【ARM GCC 编译专栏导读】

上篇文章:【ARM 嵌入式 编译系列 2.1 – GCC 编译参数学习】
下篇文章:【ARM 嵌入式 编译系列 2.3 – GCC 中指定 ARMv8-M 的 Thumb 指令集参数详细介绍】

文章目录

    • 编译参数介绍

编译参数介绍

通常我们在 OS 启动的时候我们可以在串口log中看到 当前使用的镜像的编译时间、是谁编译的,当前镜像是基于哪个 git commit编译的?我们如何在编译过程中添加这些参数呢?

通过下面命令获取当前时间:

$ date +"%Y-%m-%d-%H-%M-%S"
2022-12-20-10-29-31

通过下面命令获取当前用户:

$ whoami
CodingCos

通过下面命令获取当前 git id

$ git log -1 --pretty=format:'%H'

9c7085ed92eeeac5836f540511c65e5190975d46

我们只需要将上面获取到的值在 Makefile 中赋值给相应的变量, 然后使用 export将其从Makefile导出到由Makefile启动的子进程的环境中即可,如下:

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

关于 Makefile 中 export 的使用

在编的时候将上面定义的参数以宏的形式进行定义, 如下:

 PARCFLAGS += -DCOMPILE_TIME_DATE=$(COMPILE_TIME_DATE) -DCOMPILE_USER_NAME=$(COMPILE_USER_NAME) -DCOMPILE_COMMIT_ID=$(COMPILE_COMMIT_ID) \

在编译的时候使用 参数 OBJCFLAGS 即可,如下:

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 指令集参数详细介绍】


http://www.kler.cn/a/145192.html

相关文章:

  • 代码随想录算法训练营第三十九天-动态规划-337. 打家劫舍 III
  • Transformer+vit原理分析
  • 单细胞-第五节 多样本数据分析,打分R包AUCell
  • 【数据结构】二叉树
  • Git图形化工具【lazygit】
  • LNMP架构
  • 信息素养大赛知识点
  • 决策树(第四周)
  • 安卓用SQLite数据库存储数据
  • Could not resolve all files for configuration ‘:app:androidJdkImage‘.
  • UVA437 巴比伦塔 The Tower of Babylon
  • AIGC ChatGPT4总结Linux Shell命令集合
  • 求链表环的起始位置
  • Centos 7、Debian、Ubuntu中tree指令的检查与下载
  • 机器学习【03】在本地浏览器使用远程服务器的Jupyter Notebook【conda环境】
  • gitlab各版本安装注意点:
  • Jenkins CI/CD
  • 数仓成本下降近一半,StarRocks 存算分离助力云览科技业务出海
  • JVM——几种常见的对象引用
  • 不存在类型变量 A, T 的实例,使 Collector<T, A, List<T>> 符合 Supplier<R>
  • 从零开始搭建博客网站-----构建项目
  • 探索 Linux vim/vi 编辑器:介绍、模式以及基本操作演示
  • 【深度学习】如何选择神经网络的超参数
  • 排查生产环境:MySQLTransactionRollbackException数据库死锁
  • Meta最新视频生成工具:emu video技术报告解读
  • HarmonyOS应用开发者高级认证【题库答案】