2025-05-06 21:37:53 +08:00
2025-05-06 21:36:49 +08:00
2025-05-06 21:37:53 +08:00

🏷️ 单片机程序版本号生成

脚本使用 Python 编写,符合语义化版本规范(SemVer 2.0.0)。

功能特点

  • 自动从项目根目录的 version.txt 文件读取版本信息(不存在则创建默认版本文件)
  • 支持主版本号、次版本号、修订版本号和预发行版本号
  • 自动检测 Git 仓库信息,并将 commit ID 添加到版本号中
  • 检测未提交的更改,有未提交内容时在版本号中添加 * 标记
  • 使用正则表达式验证生成的版本号是否符合语义化版本规范
  • 生成包含版本信息的 C 源文件,便于在程序中使用

📝 版本号格式

生成的版本号格式为:major.minor.revision[-prerelease][+commitID]

例如:

  • 0.1.0 - 基本版本号
  • 1.2.3-alpha - 带预发行标识的版本号
  • 1.2.3+a1b2c3d4 - 带构建元数据commit ID的版本号
  • 1.2.3-beta+a1b2c3d4* - 带预发行标识、构建元数据且有未提交更改的版本号

📋 使用方法

📄 版本配置文件

在项目根目录创建 version.txt 文件,格式如下:

major_version=0
minor_version=1
revision_version=0
pre_release_version=alpha

若不存在此文件,脚本会自动创建默认配置(主版本号=0次版本号=1修订版本号=0无预发行版本号

🚀 调用脚本

基本调用格式:

python MCUVersionGen.py [程序名称] [项目路径]
  • 程序名称:可选参数,默认为 "McuProgram"
  • 项目路径:可选参数,默认为当前目录 "."

📂 输出文件

脚本生成的版本信息存放在项目目录下的 ./Core/App/AutoGen/autogen_version.c 文件中,包含以下变量:

const char *g_name = "程序名称";
const char *g_version = "版本号";
const char *g_buildTime = "构建时间";

在程序中使用时,通过声明这些外部变量即可:

extern const char *g_name;
extern const char *g_version;
extern const char *g_buildTime;

🔧 集成到开发环境

🛠️ STM32CubeIDE

在项目配置中设置"Pre-build steps"

  1. 右键点击项目 → 选择"Properties"
  2. 展开"C/C++ Build" → 选择"Settings"
  3. 切换到"Build Steps"标签
  4. 在"Pre-build steps"区域输入: python ${ProjDirPath}/Tools/McuVersionGen.py ${PROJECT_NAME_STR} ${ProjDirPath}
  5. 点击"Apply and Close"保存设置

🔄 CMake

在 CMakeLists.txt 中添加:

# 在编译前执行版本生成脚本
execute_process(COMMAND python ${CMAKE_CURRENT_SOURCE_DIR}/Tools/McuVersionGen.py ${PROJECT_NAME_STR} ${CMAKE_CURRENT_SOURCE_DIR}
        RESULT_VARIABLE result
        OUTPUT_VARIABLE script_output)
message(${script_output})

# 每次构建都生成新的版本号
add_custom_target(version_gen
        COMMAND python ${CMAKE_CURRENT_SOURCE_DIR}/Tools/McuVersionGen.py ${PROJECT_NAME_STR} ${CMAKE_CURRENT_SOURCE_DIR}
        COMMENT "Running McuVersionGen.py script"
)
add_dependencies(${CMAKE_PROJECT_NAME} version_gen)

🤝 贡献与支持

欢迎通过 Issue 和 Pull Request 为项目做出贡献。如有任何问题或建议,请在项目仓库中提出。

Description
No description provided
Readme 30 KiB
Languages
Python 100%