QMake Pre-Build-Schritt vor jeder Kompilierung

Es gibt mehrere Fragen zu SO, wie ein vorab erstellter Schritt für erstellt werden kannqmakeDas kann ich damit 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

Das Problem ist nun, dass dieser Ansatz an sich kein Build-Schritt ist, sondern nur ein weiteres Build-Ziel-j Flag konfiguriert fürmake Es führt mein Skript ausparallel mit den anderen Build-Jobs. Das ist sehr schlecht, weil mein Skript eine Header-Datei erstellt / aktualisiert - Änderungen während der Kompilierung sind nicht akzeptabel.

Also, gibt es sowieso ich kann dieses Skript schon mal ausführen lassenirgendein Kompilierung ist gelaufen? Ich weiß, dass ich ein anderes Skript erstellen und das aufrufen kannversion_getter.py undqmake Dies ist jedoch nicht wünschenswert, da das Kompilieren über die Befehlszeile und nicht über Qt Creator erfolgen muss.

Aktualisieren

Das Ganze.pri Datei, die von jedem meiner Unterprojekte enthalten ist, ist unten:

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
}

Dies führt jedoch immer noch zu demselben parallelen Verhalten. Ich dachte, es könnte an meiner Verwendung von liegenccache, aber das Ausschalten machte keinen Unterschied (außer natürlich viel langsamer zu sein).

Antworten auf die Frage(2)

Ihre Antwort auf die Frage