Wie kann ich die Ausgabe eines Befehls als Compiler-Flag durch eine Qt-Projektdatei übergeben?
-
21-08-2019 - |
Frage
Ich versuche, die Ausgabe von „git beschreiben“, um die über Fenster meiner Anwendung hinzuzufügen, so ist es einfacher, herauszufinden, welche Version der Anwendung Menschen nutzen.
Ich kann es tun, indem Sie den folgenden Compiler-Flag hinzu: -DAPP_VERSION = "$ (git HEAD beschreiben)"
Aber da das Projekt auf Qmake basiert, würde Ich mag einen Weg finden, diese in die Qt-Projektdatei zu setzen. Ist das möglich? Und wenn ja, wie?
edit: Ich habe versucht, den folgenden:
QMAKE_CXXFLAGS + = -DAPP_VERSION = "$ (git HEAD beschreiben)"
Aber es gab mir nur „-DAPP_VERSION =“, so nehme ich an ich habe einige Escape-Zeichen verwenden, aber ich weiß nicht, welche und wo. : /
Lösung
Problem gelöst durch diesen Link: http: // robertcarlsen .net / blog / 2009/01/06 / qmake-Xcode-bug-258
Hier ist ein Beispiel qt Projekt, das ich verwenden, um es zu 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();
}
Andere Tipps
Sie können auch verwenden
QMAKE_CXXFLAGS += -DAPP_VERSION=\\\"$$system(git describe HEAD)\\\"
Dies wird den git Befehl nur einmal während der qmake Lauf durchführen, die Kompilierung für große Projekte könnten beschleunigen. Allerdings müssen Sie sicherstellen, qmake
und make clean
nach dem Ziehen aus dem Repository ausgeführt werden.