8
votes

Obtenir le chemin de Qt 5 plugins supplémentaires

Dans un projet QT 4, je construis un programme d'installation Windows à l'aide d'Inno Configuration. Les bibliothèques requises (qsqlite.dll, qjpeg4.dll, etc.) sont incluses dans le script avec des variables de cmake tels que qt_qsqlite_plugin_release code> ou qt_qjpeg_plugin_release code>.

ex: configuration. ISS.IN: P>

[Files]
Source: "myapp.exe"; DestDir: {app}
Source: "${QT_QSQLITE_PLUGIN_RELEASE}"; DestDir: {app}/sqldrivers
Source: "${QT_QJPEG_PLUGIN_RELEASE}"; DestDir: {app}/imageformats


2 commentaires

Pas sûr d'une réponse, mais vous pouvez examiner toutes les variables à l'aide de la technique décrite dans Cette réponse


Ouais, j'ai utilisé exactement cette macro pour trouver des variables mentionnées ci-dessous avec Qt4. Mais en utilisant la même chose, je ne trouve pas l'équivalent Qt5. Toutes les choses CMAKE ont été rééchappées pour la nouvelle version du cadre et certaines informations sont stockées comme propriétés cible. Mais je n'ai trouvé aucun moyen de déboguer les propriétés sur les objectifs Qt5.


3 Réponses :


14
votes

QT5 ne s'appuie plus sur un fichier de module CUKE pour rechercher l'installation Qt5, mais fournit son propre fichier de configuration CUPAKE, qui établit les bibliothèques Qt5 comme cumakes importés. Pour obtenir le chemin d'accès actuel au fichier de bibliothèque de modules QT, interrogez la propriété Emplacement CODE> de la cible de la cmke de module ou de sa variante spécifique de configuration emplacement_ code> version, par exemple:

find_package(Qt5Core)
get_target_property(QtCore_location_Release Qt5::Core LOCATION_Release)

find_package(Qt5Widgets)
get_target_property(QtWidgets_location_Release Qt5::Widgets LOCATION_Release)


3 commentaires

Vous avez raison, mais je n'ai pas trouvé le bon établissement de la propriété cible dans qt5xxxconfig [version] .cmake fichiers, et je n'ai pas trouvé de macro qui fait le même tour que Celui-ci mais pour les propriétés.


Lien brisé vers Qt5 Clake Manual


Je suis arrivé à cette réponse lors d'une recherche d'un problème différent. Longue histoire courte: Ajout "_Release" (et dans mon cas, "_debug") à l'emplacement Arg of Get_Target_Property () a fait exactement ce dont j'avais besoin. J'avais besoin de contrôler la construction des Libs Qt, je copié à un endroit particulier, et cela fait l'affaire.



4
votes

AS de QT 5.2, les plugins sont également disponibles en cibles importés:

http://doc.qt.io/qt- 5 / CUKE-Manual.html # Imported-Cibles

https://codereview.qt-project.org/#change,63100

Lire la propriété de localisation à partir de cibles importées, pas une propriété de localisation spécifique à la configuration. Cmake gérera la partie de configuration.


0 commentaires

0
votes

Bâtiment sur la réponse de Steveire, c'est ainsi que vous obtiendrez les chemins absolus vers les plugins QSQLite et QJPEG:

find_package(Qt5Gui)
find_package(Qt5Sql)

get_target_property(qsqlite_loc Qt5::QSQLiteDriverPlugin LOCATION_Release)
message("QSqlite DLL: ${qsqlite_loc}")

get_target_property(qjpeg_loc Qt5::QJpegPlugin LOCATION_Release)
message("QJpeg DLL: ${qjpeg_loc}")


3 commentaires

Votre réponse n'est pas correcte. Lire la localisation non localisée_release.


J'ai commencé avec l'emplacement mais j'ai changé parce que la question originale ne cherchait que des plugins de libération. Vous pouvez certainement simplement laisser Cmake gérer la configuration.


Je viens de commencer à travailler avec qt et cmake il y a une heure et je ne peux pas croire à quel point l'ensemble du processus est rationalisé. Pas super documenté mais c'est là que Stackoverflow vient pour la rescousse.