C Compiler automatic Version increment

3.8k views Asked by At

I'm wondering if there's a macro or a simple way to let the compiler increment either major, minor or revision of my code each time when I compile?

By the way I'm using the ARM compiler and uVision from Keil.

4

There are 4 answers

0
Klaus On BEST ANSWER

To set the version is not a compiler topic. This should be done in connection with a source code control / version control system like cvs/svn/git or others. Your build id should be connected to the content of your source code database to get reproducible builds from checkouts from your version control system. Or, if your code is not already committed to your database a dirty-tag should be provided and compiled in to give the user of the software a chance to see that this is not a controlled version.

Simply counting a value in a variable can be done by a Makefile or in pre- and post-build instructions which depends on the used IDE. Sorry, for keil I have no experience...

0
i486 On

Define Post-Build Event to run small external program. The program has to modify specific .h file. In the header file define macros like VER_MAJOR, VER_MINOR, VER_BUILD. Date/time string can also be updated. I use this method and can control the version numbers as I wish.

0
Max On

IMO, you do not need to do this, especially increase a number every time you compile your code.

Set the major and minor revision manually in a header file; you should not have to do this often.

Build number should only be related to the source control revision number (i.e. you should be able to build and rebuild any revision under source control).

Imagine if you are a team of 5 developers, and everyone build and rebuild on their side what is the actual build number? do they all update a header file ? who is responsible of owning that header file ?

0
Peter On

Some compilers do support features like "post build", which runs a program of your choice after compiling, but that would be tricky if your program is built from multiple source files. Not all compilers do though.

For that reason, I wouldn't actually do this sort of thing via the compiler. I'd do it in the build script (e.g. makefile) or by configuring the build settings in your IDE.

Assuming you're using make or similar, add a target something like setversion (you pick the name) that runs a program which modifies a header file which specifies the components of your version number. So typing make setversion will update your version numbers.

Optionally, that target can also - after updating the version numbers - do a make clean (i.e. delete all object files and executables) and make all (to recompile and link everything).

I also suggest avoiding changing version numbers after each recompile. Imagine you're busily testing and debugging code, and go through several rebuild cycles. Do you really want the version number updated every time you recompile even one source file? It can be done that way if you choose, but will make every rebuild take longer (and, in projects with multiple source files) you will need to take care if you want to preserve capability for incremental builds.