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

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

В простых Makefile я делаю так:

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

VERSION: .git
    git describe > VERSION

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


person Vi.    schedule 22.02.2011    source источник


Ответы (2)


Если бы вы передавали информацию о версии в виде включаемого файла (скажем, «версия.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 строки рассказывают, как создать новый целевой объект с именем «версия», который генерирует «версия.h». Это делается путем выполнения команды «‹PUT_YOUR_COMMANDS_HERE›». Цель зависит от ".git"

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

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

person jwernerny    schedule 03.03.2011
comment
Попытка заставить это работать, возникла другая проблема: stackoverflow.com/questions/5192714/ - person Vi.; 04.03.2011

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

VERSION = $$system(-git-dir=$PWD/.git <PUT_YOUR_GIT_COMMANDS_HERE>)
person Martin Delille    schedule 20.04.2015
comment
В каком каталоге будет выполняться команда? В исходном каталоге или в каталоге сборки? - person Vi.; 21.04.2015
comment
И .git находится в исходном каталоге. - person Vi.; 22.04.2015
comment
вы можете использовать git --git-dir, чтобы указать папку .git - person Martin Delille; 22.04.2015
comment
вот так git --git-dir=$PWD/.git <YOU_COMMANDS_HERE - person Martin Delille; 22.04.2015