2010-02-24 7 views
11

J'ai un qmake construire quelques bibliothèques et une application qui en dépend. En utilisant le modèle de sous-répertoires, je peux obtenir qmake pour sortir un fichier .sln qui fonctionne presque à mon goût dans VC2008. Bien que j'aie spécifié les dépendances entre les cibles de toutes les manières que j'ai vues, je finis avec aucune "dépendance de projet" dans le fichier .sln, et je dois les ajouter manuellement.Comment obtenir qmake pour générer des "dépendances de projet" dans un projet Visual Studio .sln

Jusqu'à présent, j'ai essayé

CONFIG += ordered 

avec ordre correct en vain.

Et De même, la syntaxe plus Arcane:

client.depends = core common 

Ce qui ne fonctionne pas non plus. Aucune dépendance ne s'affiche quand je charge le sln.

Répondre

1

Je ne suis pas un wiz dans les fichiers makefiles mais si j'étais vous, j'essayerais de recréer cette dépendance avec QtCreator en éditant le fichier .pro, exécutant qmake puis en regardant le résultat généré automatiquement dans MAKLEFILE. Si vous voulez savoir comment fonctionne qmake, regardez la documentation de qt.

+0

Je suis sur chaque ensemble de documents que je peux trouver. Et fait beaucoup de plongée à la source pour démarrer. En remarque, les fichiers makefiles générés par qmake semblent avoir les dépendances correctes. C'est le .sln qui a le problème. –

+0

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

+0

Je l'aurais deviné vécu dans le fichier .sln, car c'est le fichier qui connaît tous les différents projets et peut les relier aux dépendances dont j'ai besoin. –

2

D'une ancienne entrée de la liste de diffusion: http://lists.trolltech.com/qt-interest/2006-07/thread00238-0.html

Il semble qu'il essaie de comprendre les choses qui dépendent pour vous. Êtes-vous capable de construire à partir du sln sans entrer manuellement les dépendances du projet?

+0

Je suis tombé sur ce post cryptique avant. Je ne sais pas si l'information est à 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 assez de problèmes, à la fois ouverts et silencieux, que ça vaut toujours la peine d'ajouter les retombées à la main. –

+0

Avez-vous essayé de définir les dépendances avec QtCreator et ensuite créer le sln? Je n'ai pas ma machine Qt Dev en face de moi, donc je ne peux pas dire avec certitude ce qu'il met dans le fichier pro lorsque vous spécifiez des dépendances dans la vue du projet. –

8

Les deux CONFIG += ordered et target.depends = ne sont pas pris en charge par le backend MSVC de qmake (générateur de solution). Retour en 2010 avec Qt 4.7 autour, les documents ne mentionnent pas, mais dans Qt 4.8 les développeurs ont mis à jour la documentation accordingly (voir les remarques de la section cible):

  • .depends Ce sous-projet dépend spécifié sous-projet. Disponible uniquement sur les plates-formes qui utilisent les fichiers makefiles.
  • L'option commandée n'est pas prise en charge pour Visual Studio.

Mais ils avaient fourni une solution de contournement (dont il est question dans ce cryptic post), et il est toujours valable et même documenté dans la même section target. Dommage que je devais reconstruire qmake et utiliser un débogueur pour vérifier que:

  1. a) Il y a un projet Lib/DLL dont TARGET (le .lib est utilisé et non le .dll) est utilisé sur la ligne de liaison d'un autre projet de votre solution (vous pouvez modifier la ligne de liaison avec LIBS).

    b) Il existe un projet Exe dont TARGET est utilisé dans une étape de construction personnalisée d'un autre projet de votre solution.

  2. Vous n'utilisez pas de chemins dans la variable TARGET (utilisez DESTDIR/DLLDESTDIR pour cela), par exemple, TARGET = $ (SOME_VARIABLE)/myLib, ne fonctionnera pas.
  3. Si vous avez un emplacement spécial pour vos bibliothèques, spécifiez -Lmy/library/path et LIBS + = mylib, au lieu de simplement utiliser LIBS + = my/library/path/mylib
  4. Les projets feuille sont créés avant de générer le fichier de solution. (Vous pouvez utiliser le drapeau récursive pour qmake de le faire, comme "qmake vc -r -tp [yourproject.pro]"

Fondamentalement, qmake généreront la dépendance lorsque le nom de la cible de votre lib (yourlib.lib) est égal à celui des bibliothèques d'importation de l'application finale (qui a LIBS += yourlib.lib). (Voir qmake's source où les bibliothèques d'importation sont ajoutées en tant que dépendances, et un little further où ils sont comparés avec les noms cibles du projet)

ici est l'installation minimale qui génère des dépendances dans la solution:

solution.pro 
    TEMPLATE = vcsubdirs 
    SUBDIRS = main app 

app/app.pro 
    LIBS += main.lib 

main/main.pro 
    TARGET = main 
    TEMPLATE = vclib 

Avec ceux-ci, si vous exécutez qmake -r -tp vc, vous obtiendrez la dépendance explicite dans le produit .sln:

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

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

Questions connexes