2012-11-09 10 views
9

Versionsnummern werden im gesamten Projekt benötigt; in Installateuren, Code, Toolchains usw. verachte ich die Vervielfältigung. Ich möchte, dass meine Versionsnummern in einer zentralen maßgebende Ort gespeichert werden.Versionsnummern in einem Projekt mit Qt

Ich arbeite mit C/C++ und mit Qt auf verschiedenen Plattformen. In Qt geben Qmake Projekte Versionsnummern wie:

VERSION = 1.2.3 

in Code wie ich wie version.h in einem Header etwas verwenden:

#define VERSION_MAJ 1 
#define VERSION_MIN 2 
#define VERSION_REV 3 
#define VERSION_STRING \"VERSION_MAJ\" "." \"VERSION_MIN\" "." \"VERSION_REV\" 

Mein Installateur hat für C-Toolchain Vorverarbeitung Unterstützung, so kann ich die gleiche Version wie in Version.h angegeben. Allerdings weiß ich nicht, wie man qmake dazu bringt, dieselbe Versionsnummer zu verwenden. Ich dachte, ich könnte Vorprozess die Pro-Datei, aber das wird nicht als # Zeichen arbeiten, um einen Kommentar in Pro-Dateien bedeuten und das C-Präprozessor umfallen wird.

Wer kennt eine gute Möglichkeit, meine Versionsnummer zentralisiert zu halten?

Antwort

2

Wenn Sie in der Lage sein wollen, um Ihre Versionsnummern in einer c-Header-Datei zu speichern, können Sie dies tun und dann den Import in das Qt Projektvariablen in der Projektdatei. So etwas wie die folgenden funktionieren sollte:

version.h:

#define MY_MAJOR_VERSION 3 
#define MY_MINOR_VERSION 1 

.pro

HEADERS += Version.h 

VERSION_MAJOR = MY_MAJOR_VERSION 
VERSION_MINOR = MY_MINOR_VERSION 

Der Vorteil es auf diese Weise rund tun, ist, dass Sie dann Ihre maßgebliche Header-Datei verwenden können, wenn Sie müssen andere Teile des Projekts außerhalb von Qt kompilieren.

19

ich so etwas in meinem Build-System

#.pro file 
#Application version 
VERSION_MAJOR = 1 
VERSION_MINOR = 0 
VERSION_BUILD = 0 

DEFINES += "VERSION_MAJOR=$$VERSION_MAJOR"\ 
     "VERSION_MINOR=$$VERSION_MINOR"\ 
     "VERSION_BUILD=$$VERSION_BUILD" 

#Target version 
VERSION = $${VERSION_MAJOR}.$${VERSION_MINOR}.$${VERSION_BUILD} 

Und danach können Sie VERSION_MAJOR und andere als normale Makro in Ihrer Anwendung verwenden.

+1

Wie verwende ich zum Beispiel VERSION_MAJOR von meinem C-Code? – oggmonster

+2

@oggmonster So wie Sie andere Makros in Ihrer Anwendung verwenden, zum Beispiel 'QString ("% 1.% 2.% 3 "). Arg (VERSION_MAJOR) .arg (VERSION_MINOR) .arg (VERSION_BUILD);' – MichK