Läuft ein Programm/Skript von QMake
Wir haben eine ziemlich große code-Basis. Die überwiegende Mehrheit der der code kompiliert wird mit qmake zum erzeugen der makefiles. Allerdings gibt es einige sub-Projekte, die hergestellt werden durch ausführen von batch-Dateien oder die Ausführung anderer Programme.
Ich würde gerne in der Lage sein, alles zu haben kompiliert mit qmake, aber ich kann nicht herausfinden, wie man qmake einfach ein Skript ausführen.
Eine Sache, die ich probiert habe ist mit QMAKE_EXTRA_TARGETS in meinem pro-Datei, etwa so:
TEMPLATE = lib
SOURCES = placeholder.cpp
CONFIG += no_link staticlib
batch_runner.target = placeholder.cpp
batch_runner.commands = my_batch_file.bat
QMAKE_EXTRA_TARGETS = batch_runner
Dann habe ich die batch-Datei erzeugen placeholder.cpp etwa so:
# do the real work here
# ...
# create placeholder.cpp so qmake and nmake are happy
echo //dummy >> placeholder.cpp
Dieser scheint gut zu funktionieren. Das Problem ist, dass es etwas abgedroschen. Wenn ich nicht angeben batch_runner.Ziel (d.h. ich leer lassen) oder nicht zu setzen placeholder.cpp in den QUELLEN dann die batch-Datei nie ausgeführt wird. Dies ist, weil qmake nicht batch_runner.Befehle die Aktion für alle anderen Abhängigkeiten im Makefile.
Gibt es einen besseren Weg, um QMake zu konstruieren, ein Makefile derart, dass ein Skript ausgeführt wird, wenn das Makefile ausgeführt?
InformationsquelleAutor der Frage Tom Hennen | 2010-08-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sieht es aus wie QMAKE_POST_LINK funktioniert gut für diese Art der Sache.
Dieser scheint den job zu erledigen. my_batch_file.bat wird ausgeführt, wenn nmake läuft (eher als wenn qmake läuft) und ich muss nicht alles lustig mit Platzhalter targets oder Dateien.
Es ist ziemlich wahrscheinlich, dass ich nicht alle der aufgelisteten Elemente in der 'CONFIG'.
InformationsquelleAutor der Antwort Tom Hennen
Versuchen die system () - Befehl. Zum Beispiel:
InformationsquelleAutor der Antwort Arnold Spence
Hier ist eine andere Lösung:
Die Vorlage
aux
im Grunde erzeugt ein makefile, das tut nichts, wenn ausgeführt wird, ohne Angabe eines Ziels. DieOBJECTS_DIR
undDESTDIR
Variablen auf das aktuelle Verzeichnis festgelegt, um zu verhindern, dass qmake erstellt diedebug
undrelease
Verzeichnisse (es ist wichtig, um Sie zu./
- und nicht nur.
; zumindest unter Windows). Dann, mitQMAKE_EXTRA_TARGETS
wir definieren den Ziel -first
zum ausführen des benutzerdefinierten Befehls, wenn das makefile aufgerufen wird, ohne Ziel.Es ist ein bisschen hacky, aber es bekommt den job getan.
Zusatz:
Wenn Sie verhindern möchten, dass die Erzeugung von drei makefiles (
Makefile
,Makefile.Debug
,Makefile.Release
), Sie können hinzufügenJedoch, wenn Sie dieses und, je nachdem, wie das makefile aufgerufen wird (immer manuell aufgerufen werden, wird von übergeordneten Verzeichnisses "Unterverzeichnisse" *.pro-Datei, ...), kann es notwendig sein, erstellen gefälschte
debug
undrelease
Ziele zu vermeiden "no rule to make target..." - Fehler. Zum Beispiel:InformationsquelleAutor der Antwort Ignitor
Könnten Sie die UNTERVERZEICHNISSE, die Konfiguration auf mehrere unterschiedliche Ziele, auch aus dem gleichen makefile. Das funktioniert besonders gut mit Ihren zusätzlichen Zielen, als ein subdir-Konfiguration können Sie bestimmte einem bestimmten Ziel in der makefile ausgeführt (siehe undokumentierte qmake für details). In diesem Fall würde ich alle "normalen" build-Befehle in einem .pro-Datei, die externen build-Befehle in einer anderen, und Unterverzeichnisse .pro-Datei zu erstellen, alle von Ihnen. Habe ich noch nicht getestet, alles ganz so, aber es sollte funktionieren.
regelmäßig.pro:
externe.pro:
do_it_all.pro:
InformationsquelleAutor der Antwort Caleb Huitt - cjhuitt