11
votes

Comment obtenir QMake pour générer des «dépendances du projet» dans un projet Visual Studio .SLN.

J'ai un qmake de quelques bibliothèques et une application qui en dépend. Utilisation du modèle SubDirs, je suis capable d'obtenir QMake de sortir un fichier .SLN qui fonctionne presque à mon goût dans VC2008. Bien que j'ai spécifié les dépendances entre les cibles de toutes les directions que j'ai vues décrites, je ne finis pas sans «dépendances du projet» dans le fichier .sln et je dois les ajouter manuellement.

jusqu'à présent, je ' J'ai essayé xxx

avec commande correcte en vain.

et de la même manière la syntaxe d'arcane: xxx

qui ne fonctionne pas non plus. Aucune dépendance, que ce soit apparaître lorsque je charge le SLN.


0 commentaires

3 Réponses :


1
votes

Je ne suis pas un Wiz dans des fabricants de fabricants, mais si j'étais vous, j'essaierais de recréer cette dépendance avec QTCreator en modifiant le fichier .pro, exécutant QMake, puis en regardant le résultat généré automatiquement dans le fichier Maklefile. Si vous voulez savoir comment QMake fonctionne, regardez la documentation QT.


3 commentaires

J'ai été sur chaque ensemble de documents que je peux trouver. Et fait beaucoup de plongée source pour démarrer. À titre de note latérale, les Makefiles QMAKE génèrent semblent avoir les dépendances correctes. C'est le .sln qui a le problème.


@Michael: voulez-vous dire les fichiers individuels .vcproj (puisque je crois que c'est là que vivent ces dépendances).


J'aurais deviné que ces choses vivaient dans le fichier .sln, car c'est le dossier qui connaît tous les différents projets et peut les connecter avec les dépendances dont j'ai besoin.



2
votes

Dans une ancienne entrée de liste de diffusion: http://lists.trolltech.com/qt-interest/ 2006-07 / threv00238-0.html

Il semble qu'il essaie de déterminer quelles choses dépendent de vous. Êtes-vous capable de construire à partir du SLN sans entrer dans les dépendances du projet manuellement?


2 commentaires

Je suis tombé sur ce post cryptique avant. Je ne sais pas si les informations sont à jour. J'ai certainement essayé d'utiliser à la fois les méthodes simples et complexes qu'il décrit, mais en vain. Sans entrer les dépendances manuellement, je ne peux pas dire que la construction fonctionne vraiment, non. Ce n'est pas complètement cassé, mais il y a suffisamment de problèmes, à la fois manifestées et silencieuses, qu'il valait toujours la peine d'ajouter les DEP à la main.


Avez-vous essayé de définir les dépendances avec QTCreator, puis de créer le SLN? Je n'ai pas ma machine de devir qt devant moi, alors je ne peux donc pas dire avec certitude ce qu'il met dans le fichier PRO lorsque vous spécifiez des dépendances dans la vue Projet.



8
votes

Les deux config + = commandé code> et cible.depends = code> ne sont pas pris en charge par le backend MSVC de QMake (générateur de solutions). De retour en 2010 avec Qt 4.7 autour, les Docs n'ont pas mentionné cela, mais dans Qt 4.8, les développeurs ont mis à jour les docs en conséquence (voir la section cible Remarques):

  • .depends em> Ce sous-projet dépend de la sous-projet spécifiée. Disponible uniquement sur les plates-formes qui utilisent des maquillages forts>. Li>
  • L'option commandée em> n'est pas prise en charge pour Visual Studio. Li> ul>

    mais ils avaient fourni une solution de contournement (qui est discutée dans ce POST CRYPTIQUE ), et il est toujours valide et même documenté dans le même cible section. Dommage que je devais reconstruire qmake et utiliser un débogueur pour vérifier que: P>

    1. a) il y a un projet LIB / DLL dont la cible (la .lib est utilisée et non le .dll) est utilisée sur la ligne de liaison d'un autre projet dans votre solution (vous pouvez modifier la ligne de liaison avec Libs). P>

      b) Il existe un projet EXE dont une cible est utilisée dans une étape de construction personnalisée d'un autre projet dans votre solution. P> LI>

    2. Vous n'utilisez pas de chemins dans la variable cible (utilisez DESDIR / DLLDESTDIR pour cela), E.g, cible = $ (quelque_viaable) / mylib, ne fonctionnera pas. li>
    3. Si vous avez un emplacement spécial pour vos libs, vous spécifiez le -lmy / la bibliothèque / Path and Libs + = MyLib, au lieu d'utiliser uniquement des libs + = My / Bibliothèque / Path / MyLib Li>
    4. Les projets de feuille sont créés avant de générer le fichier de solutions. (Vous pouvez utiliser le drapeau récursif pour QMake pour le faire, comme "QMake -TP VC -R [YourProject.Pro]" LI> ol> blockQuote>

      Fondamentalement, QMake générera une dépendance lorsque votre nom cible de votre LIB ( yourlib.lib code>) est égal à l'une des bibliothèques d'importation de l'application finale (qui a libs + = yourlib.lib code>). (Voir Source de QMake Où Les bibliothèques d'importation sont ajoutées en tant que dépendances et un Petit autre où ils sont comparés avec les noms cibles du projet) P>

      Voici la configuration minimale qui génère des dépendances dans la solution: P>

      GlobalSection(ProjectDependencies) = postSolution
          {E634D0EB-B004-3246-AADA-E383A376158F}.0 = {1BD6E999-63E6-36F5-99EE-1A650332198C}
      EndGlobalSection
      


1 commentaires

Merci beaucoup! Enfin, je sais pourquoi les dépendances de Heck ne fonctionnent pas.