10

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?

Vi.
  • 37,014
  • 18
  • 93
  • 148

2 Answers2

19

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).

Dirk Groeneveld
  • 2,547
  • 2
  • 22
  • 23
jwernerny
  • 6,978
  • 2
  • 31
  • 32
  • Trying to get this to work, having other issue: http://stackoverflow.com/questions/5192714/how-to-refer-to-the-source-directory-in-qmake – Vi. Mar 04 '11 at 12:22
  • Unfortunately `PRE_TARGETDEPS` only puts the target at the front of the dependency list of the final target. Thus as soon as you compile in parallel runing `make -j` this is likely to fail. – Morty Aug 19 '21 at 14:51
0

A simpler solution even if @jwernemy as nice way to solve it:

VERSION = $$system(-git-dir=$PWD/.git <PUT_YOUR_GIT_COMMANDS_HERE>)
Martin Delille
  • 11,360
  • 15
  • 65
  • 132