qmake pre-build-Schritt, bevor Sie JEDE Zusammenstellung
Gibt es mehrere Fragen auf, SO über, wie man erstellen Sie eine pre-build-Schritt für qmake
ich tun kann, mit diesem in meinem .pro
Datei:
versionTarget.target = ../VersionData/versioning.h
versionTarget.depends = FORCE
win32: versionTarget.commands = cd $$PWD; python.exe ./version_getter.py -p $$TARGET
else: versionTarget.commands = cd $$PWD; python ./version_getter.py -p $$TARGET
PRE_TARGETDEPS += ../VersionData/versioning.h
QMAKE_EXTRA_TARGETS += versionTarget
Nun, das problem ist, dass dieser Ansatz nicht um einen build-Schritt per se, sondern nur eine andere build-Ziel, also wenn ich die -j
- flag konfiguriert für make
es läuft mein script in parallel mit der anderen build-jobs. Das ist sehr schlecht, weil mein Skript erstellt/aktualisiert eine header-Datei - dass die Veränderung Teil des Weges durch die Zusammenstellung ist nicht akzeptabel.
So, gibt es trotzdem kann ich dieses Skript ausgeführt, bevor alle Zusammenstellung ran? Ich weiß, ich kann erstellen Sie ein weiteres Skript und rufen Sie die version_getter.py
und qmake
in der Reihenfolge, aber dies ist nicht wünschenswert, da hätte ich zum kompilieren von der Befehlszeile aus, anstatt innerhalb von Qt Creator.
Update
Den kompletten .pri
- Datei enthalten, die von jedem meiner sub-Projekten unter:
CONFIG += thread
QT += core \
gui
versionTarget.target = ../VersionData/versioning.h
versionTarget.depends = FORCE
win32: versionTarget.commands = cd $$PWD; python.exe ./version_getter.py -p $$TARGET
else: versionTarget.commands = cd $$PWD; python ./version_getter.py -p $$TARGET
PRE_TARGETDEPS += ../VersionData/versioning.h
QMAKE_EXTRA_TARGETS += versionTarget
DEPENDPATH += ../VersionData
INCLUDEPATH += ../VersionData
HEADERS += ../VersionData/versioning.h
UI_HEADERS_DIR = $${_PRO_FILE_PWD_}/include/Qui
DESTDIR = $(SYREN_PATH)
!win32-msvc {
QMAKE_CXXFLAGS += -std=c++0x
}
Aber dies führt immer noch in die gleiche parallele Verhalten. Ich dachte, es kann schon durch meine Verwendung von ccache
sondern ihn auszuschalten, machte keinen Unterschied (außer dass Sie viel langsamer natürlich).
InformationsquelleAutor der Frage cmannett85 | 2013-04-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eine andere option wäre der start mit dem Projekt-Datei snippet in deiner ursprünglichen Frage, und auch dafür sorgen, dass qmake ist sich bewusst, dass
versioning.h
ist eine Abhängigkeit für die anderen build-targets in Ihr Projekt-Datei —versioning.h
zu IhremHEADERS
variable.versioning.h
befindet, um IhreDEPENDPATH
variable.Werden(Vorsicht: wenn Sie ausführen von qmake, wenn
versioning.h
existiert nicht, es wird emittieren "WARNUNG: Fehler finden: die Versionierung.h" — die einzige Lösung für diese Warnung ist die Verwendung dersystem()
- Befehlwie beschrieben hab ich in meiner anderen Antwort.)Beispiel
Erstellen
test.pro
mit den folgenden:Erstellen
test.c
mit den folgenden:Laufen
qmake
. Es wird die AusgabeWARNING: Failure to find: ../versioning.h
.Laufen
make -j9
. Es läuftversionTarget.commands
(Schlafmöglichkeiten für 5 Sekunden zu übertreiben jede multiprocessing-Probleme), und, nachdem dies geschehen ist, führen Sie den Befehl zum kompilierentest.c
.(Und wenn Sie prüfen die erzeugten
Makefile
Sie werden sehen, dasstest.o
hängt sowohltest.c
und../versioning.h
so Stellen sollte richtig herausfinden, dass es nicht ausgeführt werden kann, der Befehl zum kompilierentest.c
bevor der Befehl zum erstellen/aktualisieren../versioning.h
.)InformationsquelleAutor der Antwort smokris
Verwenden Sie die
system()
Befehl qmake — es läuft, wenn Sie laufenqmake
was passiert, bevormake
läuft jedem build-Befehle.InformationsquelleAutor der Antwort smokris