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

2

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?

Morea answered 22/2, 2011 at 20:18 Comment(0)
G
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).

Greatgrandaunt answered 3/3, 2011 at 15:55 Comment(2)
Trying to get this to work, having other issue: #5193214Morea
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.Memorabilia
N
0

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

VERSION = $$system(-git-dir=$PWD/.git <PUT_YOUR_GIT_COMMANDS_HERE>)
Nonreturnable answered 20/4, 2015 at 17:11 Comment(4)
In what directory will the command run? In source directory or in build directory?Morea
And the .git is in the source directory.Morea
you can use git --git-dir to specify the .git folderNonreturnable
like that git --git-dir=$PWD/.git <YOU_COMMANDS_HERENonreturnable

© 2022 - 2024 — McMap. All rights reserved.