version-controlqmakeprebuildbuild-numbers

How to add pre-build step in qmake/qtcreator?


I want the compiled application to have the commit number, source files checksums and other things to be available during the compilation.

In plain Makefiles I do like this:

prog: VERSION source.c
    gcc -DVERSION=\"$(shell cat VERSION)\" source.c -o prog 

VERSION: .git
    git describe > VERSION

How to use something similar with qmake?


Solution

  • If you were to pass the version information as an included file (let's say "version.h") instead of a #define, then you could add the following to your qmake file

    # Define how to create version.h
    version.target = version.h
    version.commands = <PUT_YOUR_COMMANDS_HERE>
    version.depends = .git
    
    QMAKE_EXTRA_TARGETS += version
    
    PRE_TARGETDEPS += version.h
    

    The first 3 lines tell how to make a new target object called "version" that generates "version.h". It is made by executing the commands "<PUT_YOUR_COMMANDS_HERE>". The target is dependent on ".git"

    The "QMAKE_EXTRA_TARGETS" says there is a new target known as "version".

    The "PRE_TARGETDEPS" indicates that "version.h" needs to exist before anything else can be done (which forces it to be made if it isn't already made).