C 编译器自动版本增量
C Compiler automatic Version increment
我想知道是否有宏或简单的方法可以让编译器在每次编译时增加我代码的主要、次要或修订?
顺便说一下,我使用的是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
(重新编译和链接所有内容)。
我还建议避免在每次重新编译后更改版本号。 假设您正忙于测试和调试代码,并经历几个重建周期。 您真的希望每次重新编译一个源文件时都更新版本号吗? 如果你愿意,可以这样完成,但会使每次重建花费更长的时间(而且,在具有多个源文件的项目中),如果你想保留增量构建的功能,你需要小心。
- CMake 库链接使用两个不同的编译器版本
- 我的设备上的 C++ 编译器版本是什么
- 不同版本的编译器(例如GCC)是否会产生不同的性能?
- 为什么库API+编译器ABI足以确保具有不同版本gcc的对象之间的兼容性
- 检测到 Conan 配置文件设置与 CMake 之间的编译器版本不匹配
- 是否根据编译器版本有条件地包含源文件
- 如果使用低于 VS2015 的 vc++ 编译器版本编译,则 DLL 中的访问冲突
- 在Travis中为CMAKE构建指定编译器版本
- 是否有编译器标志可以使较新的 gcc 版本像旧版本一样构建
- Apple Clang编译器版本架构架构
- GCC编译器,为较低版本的GCC编译应用程序
- 功能模板与Variadic模板过载:Intel C 编译器版本18产生的结果不同于其他编译器.英特尔是错误的
- Boost bjam 不会将编译器版本放在文件名中
- 具有C 接口的C 动态库如何在不同的编译器版本之间不会破坏ABI
- 不同编译器版本的C++中的奇怪行为(字符串通过引用传递):参见简单的程序说明
- 在不同的编译器版本中调用new[]和delete[]
- c++ 编译器优化是否可以针对布尔参数生成两个版本的函数
- 具有状态的Microsoft编译器版本19.16.27024.1的问题
- Node.js C 插件开发的编译器版本
- unix中的C 编译器版本