C编译器自动版本递增
C Compiler automatic Version increment
我想知道是否有宏或简单的方法让编译器在每次编译时增加我的代码的主要、次要或修订版?
顺便说一下,我使用的是来自 Keil 的 ARM 编译器和 uVision。
定义 Post-Build Event 到 运行 小型外部程序。该程序必须修改特定的 .h 文件。在头文件中定义 VER_MAJOR、VER_MINOR、VER_BUILD 等宏。 Date/time 字符串也可以更新。我用这个方法,可以随意控制版本号
IMO,你不需要这样做,尤其是每次编译代码时都增加一个数字。
在头文件中手动设置主要和次要修订版;你不应该经常这样做。
构建号应该只与源代码管理修订号相关(即您应该能够在源代码管理下构建和重建任何修订)。
想象一下,如果您是一个由 5 名开发人员组成的团队,并且每个人都在自己这边构建和重建,那么实际构建号是多少?
他们都更新头文件吗?
谁负责拥有该头文件?
设置版本不是编译器的话题。这应该与源代码控制/版本控制系统(如 cvs/svn/git 或其他)一起完成。您的构建 ID 应该连接到源代码数据库的内容,以便从版本控制系统的签出中获得可重现的构建。或者,如果您的代码尚未提交到您的数据库,则应提供并编译脏标签,让软件用户有机会看到这不是受控版本。
可以通过 Makefile 或预构建指令和 post-构建指令来简单地计算变量中的值,这取决于所使用的 IDE。不好意思,对于keil我没有经验...
有些编译器确实支持 "post build" 等功能,它可以在编译后运行您选择的程序,但如果您的程序是从多个源文件构建的,那将很棘手。但并非所有编译器都这样做。
出于这个原因,我实际上不会通过编译器做这种事情。我会在构建脚本(例如 makefile)中或通过在 IDE 中配置构建设置来完成。
假设您使用的是 make
或类似的,添加一个类似于 setversion
(您选择名称)的目标,该目标运行一个程序,该程序修改一个头文件,该头文件指定您的版本的组件数字。所以键入 make setversion
将更新您的版本号。
可选地,该目标还可以 - 在更新版本号后 - 执行 make clean
(即删除所有目标文件和可执行文件)和 make all
(重新编译和 link 所有内容).
我还建议避免在每次重新编译后更改版本号。想象一下,您正忙于测试和调试代码,并经历了几个重建周期。您真的希望每次重新编译一个源文件时都更新版本号吗?如果您愿意,可以那样做,但会使每次重建花费更长的时间(并且,在具有多个源文件的项目中),如果您想保留增量构建的能力,则需要小心。
我想知道是否有宏或简单的方法让编译器在每次编译时增加我的代码的主要、次要或修订版?
顺便说一下,我使用的是来自 Keil 的 ARM 编译器和 uVision。
定义 Post-Build Event 到 运行 小型外部程序。该程序必须修改特定的 .h 文件。在头文件中定义 VER_MAJOR、VER_MINOR、VER_BUILD 等宏。 Date/time 字符串也可以更新。我用这个方法,可以随意控制版本号
IMO,你不需要这样做,尤其是每次编译代码时都增加一个数字。
在头文件中手动设置主要和次要修订版;你不应该经常这样做。
构建号应该只与源代码管理修订号相关(即您应该能够在源代码管理下构建和重建任何修订)。
想象一下,如果您是一个由 5 名开发人员组成的团队,并且每个人都在自己这边构建和重建,那么实际构建号是多少? 他们都更新头文件吗? 谁负责拥有该头文件?
设置版本不是编译器的话题。这应该与源代码控制/版本控制系统(如 cvs/svn/git 或其他)一起完成。您的构建 ID 应该连接到源代码数据库的内容,以便从版本控制系统的签出中获得可重现的构建。或者,如果您的代码尚未提交到您的数据库,则应提供并编译脏标签,让软件用户有机会看到这不是受控版本。
可以通过 Makefile 或预构建指令和 post-构建指令来简单地计算变量中的值,这取决于所使用的 IDE。不好意思,对于keil我没有经验...
有些编译器确实支持 "post build" 等功能,它可以在编译后运行您选择的程序,但如果您的程序是从多个源文件构建的,那将很棘手。但并非所有编译器都这样做。
出于这个原因,我实际上不会通过编译器做这种事情。我会在构建脚本(例如 makefile)中或通过在 IDE 中配置构建设置来完成。
假设您使用的是 make
或类似的,添加一个类似于 setversion
(您选择名称)的目标,该目标运行一个程序,该程序修改一个头文件,该头文件指定您的版本的组件数字。所以键入 make setversion
将更新您的版本号。
可选地,该目标还可以 - 在更新版本号后 - 执行 make clean
(即删除所有目标文件和可执行文件)和 make all
(重新编译和 link 所有内容).
我还建议避免在每次重新编译后更改版本号。想象一下,您正忙于测试和调试代码,并经历了几个重建周期。您真的希望每次重新编译一个源文件时都更新版本号吗?如果您愿意,可以那样做,但会使每次重建花费更长的时间(并且,在具有多个源文件的项目中),如果您想保留增量构建的能力,则需要小心。