平常在写单片机项目时会加入版本号,编译时间等。嫌手动修改宏定义麻烦,尝试使用脚本自动完成,刚好 MDK 也可以指定运行脚本。
脚本语言选择 Python
方法是 MDK
在编译代码前执行 Python
文件,替换指定文件内的字符串。
#define BUILD_NUM (uint8_t *)"7"
#define BUILD_TIME (uint8_t *)"2020-05-18 08:55:08"
在 Option|User 中可以填入脚本语句 python ..\..\tools\build_version.py ..\..\usr_app\usr_service\hw_data.c
。
注意两个点:
- 脚本需要在
build
前执行 - 勾选脚本执行
参考代码很简单,个性化需求自己修改,不会 Python
的搜索学习下吧。
import time
import sys
def update_build_info(version_file_path=""):
if not version_file_path:
return
f = None
file_data = ""
try:
f = open(file=version_file_path, mode='r', encoding='utf-8')
while True:
line = f.readline()
if "#define" in line and "BUILD_TIME" in line:
_old_str_list = line.split("\"")
_old_str_list[1] = "\"{0}\"".format(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
new_str = ""
for _ in _old_str_list:
new_str += _
line = line.replace(line, new_str)
if "#define" in line and "BUILD_NUM" in line:
_old_str_list = line.split("\"")
_old_str_list[1] = "\"{0}\"".format(int(_old_str_list[1]) + 1)
new_str = ""
for _ in _old_str_list:
new_str += _
line = line.replace(line, new_str)
if line:
file_data += line
else:
break
f.close()
f = open(file=version_file_path, mode='w', encoding='utf-8')
if file_data:
f.write(file_data)
except FileNotFoundError:
print("{0} not found\n".format(version_file_path))
finally:
if f and not f.closed:
print("close file\n")
f.close()
if __name__ == "__main__":
# 传入文件路径
arg = sys.argv[1]
update_build_info(arg)