Dans mon projet C++/Qt5, j'ai des fichiers externes (PNG etc.) que j'ai besoin d'avoir copiés à côté de l'exécutable lors de la compilation. Je n'ai trouvé aucun moyen de le réaliser avec qmake.Qt5 - copie de fichiers supplémentaires en temps de construction - doit fonctionner dans plusieurs situations
J'ai demandé une variante plus légère de cette question il y a quelques années, mais tout ce que j'ai trouvé sur Internet me semble incomplet. Il doit travailler dans chacune des conditions suivantes:
- Quelqu'un ramasse mon code source et appelle simplement
qmake foo.pro && make && ./foo
(sous Linux) - Comme ci-dessus, mais elle appelle aussi
make install
après - Comme le premier, mais avec Windows (oubliez les DLL Qt ou autres trucs externes - je demande à peu près mes propres fichiers)
- Quelqu'un choisit mon code source, l'ouvre dans QtCreator et clique simplement sur Play (sur n'importe quel système d'exploitation - mais, ehmm, disons au moins Linux et Windows)
Tout ce que j'ai actuellement est plutôt technique et cassé aussi bien. Il doit y avoir quelque chose de plus léger et de mieux travailler que le mien?
C'est une variante dépouillée qui décrit ce que mon foo.pro
fait:
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
Il semble beaucoup plus compliqué qu'il me doit à. Il est cassé à bien des égards. Par exemple. si échoue dans la toute première condition (puisqu'il essaie de copier le fichier sur lui-même). Avec un correctif en place, il échoue à nouveau sur Windows (puisque OUT_PWD
n'est pas la cible réelle, mais OUT_PWD/debug
ou /release
est). Je soupçonne que make install
ne fonctionnerait pas non plus (mais pas testé).
S'il vous plaît aider;) Dois-je vraiment ajouter des correctifs pour tout cela, ou y a-t-il une approche différente?
Hi. Je ne suis pas sûr à 100%, mais pour moi, il ressemble à une variante subtilement différente de la mienne, qui fait essentiellement la même chose. N'est-ce pas? Ma solution actuelle utilise des commandes de shell (bien qu'elles soient quelque peu conçues derrière des éléments multi-plateformes). Mais cela semble un peu trop bas pour couvrir élégamment toutes les situations typiques. – ginger