项目需要获取项目代码的版本号和哈希值,在嵌入式中常使用S32 Design Studio编译C/C++ 代码。本文介绍使用.bat(Windows文件处理脚本)和python脚本,实现S32DS编译工程获取版本号和哈希值并且存储在项目工程中。
目录
一、前期准备
1.安装python(3.0以上)
2.安装Gitpython
- 打开Power Shell,执行:
pip install GitPython
- 如遇网络问题,可通过
-i
切换源:pip install GitPython -i https://pypi.mirrors.ustc.edu.cn/simple/
二、S32DS项目代码导入
在项目中代码目录创建build_scripts文件夹,存放功能代码 pre_build.py、pre_build.bat。同时创建以上俩个文件。文件代码如下:
1.pre_build.py
#!/usr/bin/python
import os
import sys
from datetime import datetime
wdir = str(sys.argv[1])
try:
import git
def get_commit_hash(wdir):
repo = git.Repo(wdir)
if repo.is_dirty():
print("Warning: repo is dirty %s" % wdir)
commit = bytes.fromhex(str(repo.head.commit))
return commit
repo = git.Repo(wdir)
tag = repo.git.describe('--tags')
print("project Tag:", tag)
project_tag_num = tag.lstrip('v').split('-')[0].split('.')
project_tag_num.append('1' if 'beta' in tag.lower() else '0')
print("project Tag Number:", project_tag_num)
projectSha = get_commit_hash(wdir)
print("project SHA:", projectSha)
except:
print("Warning: failed to get tag and commit sha!")
project_tag_num = [0,0,0,0]
projectSha = [0xFF, 0xFF, 0xFF, 0xFF]
now = datetime.now()
with open(os.path.join(wdir, 'source', 'Version', 'Version.c'), 'w+') as f:
print("#include \"Version.h\"", file=f)
print("", file=f)
print("const VersionInfo_t Version_xInfo = {", file=f)
print(" .u8Build = {%s,%s,%s,%s}," % \
(now.year // 100, now.year % 100, now.month, now.day), file=f)
print(" .u8SwTag = {%s,%s,%s,%s}," % \
(project_tag_num[0], project_tag_num[1], project_tag_num[2], project_tag_num[3]), file=f)
print(" .u8SwSha = {0x%02X, 0x%02X, 0x%02X, 0x%02X}," % \
(projectSha[0], projectSha[1], projectSha[2], projectSha[3]), file=f)
print("};", file=f)
#Get version information
print("", file=f)
print("VersionInfo_t get_VersionInfo() {", file=f)
print(" return Version_xInfo;", file=f)
print("};", file=f)
2.pre_build.bat
git submodule update --init --recursive
python %1/build_scripts/pre_build.py %1
三、S32DS项目配置
在S32DS选中项目右键 properties -> C/C++ Build -> Setting -> Build Steps 下面选择:
其中${projDirPath}项目根目录,创建 Version.h 文件并且添加头文件路径如图:
完成以上点击项目编译。就会生成Version.c文件,Version.h可以我们自己创建也可以生成。我是自己创建,方便项目调用。
四、使用
通过 get_VersionInfo() 调用存储结构体 VersionInfo_t 在需要的地方打印或输出。
总结
以上就是今天要讲的内容,本文简单介绍python和C/C++代码在S32DS的混合编译的使用。