【问题标题】:C Compiler automatic Version incrementC 编译器自动版本递增
【发布时间】:2015-06-17 12:11:01
【问题描述】:

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

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

【问题讨论】:

  • 请问为什么每次编译时都想要/需要这样做?
  • 您需要持久内存来“存储”以前的信息...文件 i/o...另外,您如何标记revision of my code?二进制名称?
  • 你应该为你的建筑机械编写脚本来做到这一点(例如你的Makefile)。而且我认为这是一个坏主意,您应该注册检查点源的唯一 ID(例如使用 git
  • 您在使用某种版本控制工具吗?那将是跟踪您的版本号的正确工具,而不是编译器。你不想在调试的时候更改版本号,对吧?
  • 编译器怎么知道主版本号是否必须递增? 1000多行代码改了?计算机完全按照他们的指示行事,你不能含糊其辞。如果您无法准确指定您想要的内容,请不要尝试将其自动化。

标签: c++ c versioning


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      在头文件中手动设置主要和次要版本;你不应该经常这样做。

      内部版本号应仅与源代码控制修订号相关(即您应该能够在源代码控制下构建和重建任何修订版)。

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

      【讨论】:

        【解决方案4】:

        一些编译器确实支持诸如“post build”之类的功能,它会在编译后运行您选择的程序,但如果您的程序是从多个源文件构建的,那将很棘手。但并非所有编译器都这样做。

        因此,我实际上不会通过编译器来做这种事情。我会在构建脚本(例如 makefile)中或通过在 IDE 中配置构建设置来完成。

        假设您使用make 或类似名称,请添加一个类似setversion(您选择名称)的目标,该目标运行一个程序,该程序修改一个指定版本号组件的头文件。所以输入make setversion 将更新您的版本号。

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

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

        【讨论】:

          猜你喜欢
          • 2019-03-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-25
          • 1970-01-01
          • 2018-05-18
          • 2021-11-26
          • 1970-01-01
          相关资源
          最近更新 更多