2016-07-07 17 views
3

In meinem C++/Qt5-Projekt habe ich einige externe Dateien (PNGs usw.), die ich während der Build-Zeit neben der ausführbaren Datei kopiert haben muss. Ich habe bisher keinen guten Weg gefunden, das mit qmake zu realisieren.Qt5 - kopieren Sie zusätzliche Dateien auf Build-Zeit - muss in vielen Situationen funktionieren

Ich habe vor Jahren eine leichtere Variante dieser Frage gestellt, aber alles da und alles, was ich im Internet gefunden habe, erscheint mir unvollständig. Es muss in jedem der folgenden Bedingungen arbeiten:

  • Jemand mein Quelltext nimmt und nur Anrufe qmake foo.pro && make && ./foo (unter Linux)
  • Wie oben, aber sie fordert auch make install danach
  • Wie die ersten, aber mit Windows (vergiss Qt DLLs oder andere externe Sachen - ich frage nur nach meinen eigenen Dateien)
  • Jemand wählt meinen Quellcode aus, öffnet ihn in QtCreator und klickt einfach auf Play (auf jedem Betriebssystem - aber, ehmm, sagen wir zumindest Linux und Windows)

Alles, was ich gerade habe, ist eher technisch und kaputt. Es muss etwas leichteres und besseres Arbeiten geben als meines.

Dies ist eine abgespeckte Variante, die, was mein foo.pro tut beschreibt:

QT += core gui xml widgets 
TARGET = foo 
TEMPLATE = app 
... 
EXTRA_BINFILES += logo.png 
for(FILE, EXTRA_BINFILES) { 
    extrafiles.commands += $$quote($${QMAKE_COPY} $$shell_path($${PWD}/$${FILE}) $$shell_path($${OUT_PWD})$$escape_expand(\n\t)) 
} 
QMAKE_EXTRA_TARGETS += extrafiles 
POST_TARGETDEPS += extrafiles 

Es sieht viel komplizierter, dass es mich zu sollen. Es ist in vielerlei Hinsicht gebrochen. Z.B. wenn es in der allerersten Bedingung fehlschlägt (da es versucht, die Datei in sich selbst zu kopieren). Wenn ein Hotfix vorhanden ist, schlägt er unter Windows erneut fehl (ist nicht das eigentliche Ziel, aber OUT_PWD/debug oder /release ist). Ich vermute, make install würde auch nicht funktionieren (aber; ungeprüft).

Bitte helfen;) Muss ich wirklich Korrekturen für all das hinzufügen, oder gibt es einen anderen Ansatz?

Antwort

0

Verwenden von Shell/qmake Skripte vor der Build in Ihrer PRO-Datei beginnt:

QMAKE_PRE_LINK += someShellCommand $$system_quote($$shell_quote(somePath)) $$escape_expand(\\n\\t)

Zum Beispiel

win32 { 
QMAKE_PRE_LINK += copy /Y $$system_quote($$shell_quote($${PWD}/../../images/*.png)) $$system_quote($$shell_quote($${PWD}/../build/Output/release/resources)) $$escape_expand(\\n\\t) 
} 


linux { 
QMAKE_PRE_LINK += cp -r -t -f $$system_quote($$shell_quote($${PWD}/../../images/*.png)) $$system_quote($$shell_quote($${PWD}/../build/Output/release/resources)) $$escape_expand(\\n\\t) 
} 

Mit Shell/qmake Skripte zur Buildzeit Abschluss in Ihrem PRO Datei:

QMAKE_POST_LINK += someShellCommand $$system_quote($$shell_quote(somePath)) $$escape_expand(\\n\\t)

+0

Hallo. Ich bin mir nicht 100% sicher, aber für mich sieht es aus wie eine subtil andere Variante von mir, die im Wesentlichen das Gleiche macht. Ist es nicht? Meine aktuelle Lösung verwendet Shell-Befehle (obwohl sie hinter plattformübergreifenden Dingen etwas versteckt sind). Aber das scheint ein wenig zu niedrig zu sein, um alle typischen Situationen elegant abzudecken. – ginger