2009-05-12 7 views
2

Ich versuche, die Ausgabe von "git describe" im About-Fenster meiner Anwendung hinzuzufügen, so dass es einfacher ist herauszufinden, welche Version der Anwendung die Leute verwenden.Wie kann ich die Ausgabe eines Befehls als Compiler-Flag durch eine Qt-Projektdatei übergeben?

Ich kann es tun, indem Sie den folgenden Compiler-Flag: -DAPP_VERSION = „$ (git HEAD beschreiben)“

Aber da das Projekt auf Qmake basiert, würde Ich mag einen Weg finden, dies zu setzen in die Qt-Projektdatei. Ist das möglich? Und wenn ja, wie?

edit: Ich habe versucht, den folgenden:

QMAKE_CXXFLAGS + = -DAPP_VERSION = "$ (git beschreiben HEAD)"

Aber es gab mir nur "-DAPP_VERSION =", so dass ich glaube, ich Ich muss einige Escape-Zeichen verwenden, aber ich weiß nicht, welche und wo. :/

Antwort

5

Problem gelöst durch diesen Link: http://robertcarlsen.net/blog/2009/01/06/qmake-xcode-bug-258

Hier ist ein Beispiel qt Projekt habe ich es testen: qt.pro:

###################################################################### 
# Automatically generated by qmake (2.01a) Thu Apr 2 16:23:05 2009 
###################################################################### 

TEMPLATE = app 
TARGET = 
DEPENDPATH += . 
INCLUDEPATH += . 

# Input 
SOURCES += qt.cpp 

QMAKE_CXXFLAGS += -DAPP_DATE=\\\"`date +'\"%a_%b_%d,_%Y\"'`\\\" 
QMAKE_CXXFLAGS += -DAPP_VERSION=\\\"`git describe`\\\" 

qt.cpp:

#ifndef APP_DATE 
#define APP_DATE "1/1/1970" 
#endif 

#ifndef APP_VERSION 
#define APP_VERSION "local-dev" 
#endif 

#include <QApplication> 
#include <QLabel> 
int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 
    QString version = QString("version ") + APP_VERSION + ' ' + APP_DATE; 
    QLabel *label = new QLabel(version); 
    label->show(); 
    return app.exec(); 
} 
+0

Geht gut mit: http://stackoverflow.com/a/12368262/1959808 –

+0

hat dies nicht das gleiche Problem oben beschrieben? Wenn Sie Zweige wechseln und qt.pro und qt.cpp nicht ändern, wird es nicht neu kompiliert ... aber der andere Zweig möglicherweise Änderungen in anderen Dateien (und haben auch einen anderen Hash) – mBardos

1

Sie können auch

QMAKE_CXXFLAGS += -DAPP_VERSION=\\\"$$system(git describe HEAD)\\\" 
verwenden

Dadurch wird der git-Befehl nur einmal während des qmake-Laufs ausgeführt, was die Kompilierung für große Projekte beschleunigen kann. Sie müssen jedoch sicherstellen, dass nach dem Ziehen aus dem Repository qmake und make clean ausgeführt werden.

+0

Nicht robust, als Alle Änderungen (z. B. schmutzig) werden leicht übersehen. –

+0

Diese Funktionalität ist für Builds erforderlich, die an andere weitergegeben werden. Und in diesem Fall sollten Sie ein Build-Skript haben, das sicherstellt, dass der Baum nicht schmutzig ist und dass eine vollständige Neuerstellung durchgeführt wurde (einschließlich eines qmake-Laufs). –

Verwandte Themen