Как добавить шаг предварительной сборки в qmake/qtcreator?

Я хочу, чтобы скомпилированное приложение имело число фиксации, контрольные суммы исходных файлов и другие вещи, которые будут доступны во время компиляции.

В простых файлах Makefile мне нравится следующее:

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

VERSION: .git
    git describe > VERSION

Как использовать что-то подобное с qmake?

Ответ 1

Если вы должны передать информацию о версии в виде включенного файла (скажем, "версия .h" ) вместо #define, вы можете добавить следующее в свой файл qmake

# 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

Первые 3 строки рассказывают, как создать новый целевой объект под названием "версия", который генерирует "version.h". Это делается путем выполнения команд "<PUT_YOUR_COMMANDS_HERE > ". Цель зависит от ".git"

"QMAKE_EXTRA_TARGETS" говорит, что есть новая цель, известная как "версия".

"PRE_TARGETDEPS" указывает, что "version.h" должен существовать прежде, чем что-либо еще будет сделано (что заставляет его делать, если оно еще не сделано).

Ответ 2

Более простое решение, даже если @jwernemy - хороший способ его решения:

VERSION = $$system(-git-dir=$PWD/.git <PUT_YOUR_GIT_COMMANDS_HERE>)