C 编译器自动版本增量

C Compiler automatic Version increment

本文关键字:版本 编译器      更新时间:2023-10-16

我想知道是否有宏或简单的方法可以让编译器在每次编译时增加我代码的主要、次要或修订?

顺便说一下,我使用的是Keil的ARM编译器和uVision。

设置版本不是编译器主题。这应该与源代码控制/版本控制系统(如 cvs/svn/git 或其他)一起完成。生成 ID 应连接到源代码数据库的内容,以便从版本控制系统的签出中获取可重现的生成。或者,如果您的代码尚未提交到您的数据库,则应提供并编译脏标记,以使软件用户有机会看到这不是受控版本。

简单地计算变量中的值可以通过 Makefile 或在构建前和构建后的说明中完成,这取决于所使用的 IDE。对不起,对于凯尔,我没有经验...

定义构建后事件以运行小型外部程序。该程序必须修改特定的.h文件。在头文件中定义宏,如VER_MAJOR、VER_MINOR VER_BUILD。日期/时间字符串也可以更新。我使用此方法,可以根据需要控制版本号。

IMO,您不需要这样做,尤其是在每次编译代码时增加一个数字。

在头文件中手动设置主要修订和次要修订;您不必经常这样做。

内部版本号应仅与源代码管理修订号相关(即,您应该能够在源代码管理下生成和重新生成任何修订版)。

想象一下,如果你是一个由 5 名开发人员组成的团队,每个人都在自己这边构建和重建,那么实际的构建号是多少?它们都更新头文件吗?谁负责拥有该头文件?

一些编译器确实支持"post build"等功能,该功能在编译后运行您选择的程序,但是如果您的程序是从多个源文件构建的,这将很棘手。 不过,并非所有编译器都这样做。

出于这个原因,我实际上不会通过编译器做这种事情。 我会在构建脚本(例如 makefile)中或通过在 IDE 中配置构建设置来执行此操作。

假设您使用的是make或类似的东西,添加一个目标,例如 setversion(您选择名称),该目标运行一个程序,该程序修改指定版本号组件的头文件。 因此,键入make setversion将更新您的版本号。

或者,该目标还可以 - 在更新版本号后 - 执行make clean(即删除所有目标文件和可执行文件)和make all(重新编译和链接所有内容)。

我还建议避免在每次重新编译后更改版本号。 假设您正忙于测试和调试代码,并经历几个重建周期。 您真的希望每次重新编译一个源文件时都更新版本号吗? 如果你愿意,可以这样完成,但会使每次重建花费更长的时间(而且,在具有多个源文件的项目中),如果你想保留增量构建的功能,你需要小心。