2009-03-23 9 views
2

Je suis actuellement en train de porter un grand projet Linux sur Visual Studio. Le projet dépend d'un certain nombre de bibliothèques tierces (Python, MPI, etc.) ainsi que de deux bibliothèques internes. Mais il peut aussi être construit sans ces bibliothèques, ou avec seulement quelques unes d'entre elles. Donc, je ne veux pas créer une configuration différente pour chaque combinaison possible, par ex. "Parallèle avec Python", "Parallèle sans Python", etc. Il y a juste trop de combinaisons. Est-ce une situation où je pourrais utiliser MSBuild? Editer: Une possibilité que j'ai envisagée est de créer un tas de fichiers .vsprops, mais c'est essentiellement la même chose que de créer un tas de configurations différentes.Éviter trop de configurations pour un projet Visual Studio

Modifier: Peut-être que CMake est plus ce que je cherche? J'aimerais entendre de tous les utilisateurs CMake là-bas ...

+0

J'ai déjà fait face à ce problème et j'ai fini par créer les configurations. 12 debug, 12 release ... pas * trop * douloureux. J'espère que l'ajout d'un commentaire heurte la question – zildjohn01

Répondre

0

Il n'y a pas de bonne solution à ce que je sache. L'EDI semble exiger une configuration pour chaque ensemble d'arguments de ligne de commande pour les outils. Donc, si N ensembles d'arguments différents sont nécessaires - comme cela semble être le cas ici - N configurations différentes seront nécessaires. C'est comme ça que fonctionne l'IDE, paraît-il. Malheureusement, mais on gagne rarement dans un combat contre Visual Studio, donc personnellement j'ai toujours cédé et créé autant de configurations que nécessaire. C'est une douleur, et c'est fiddly, et oui l'IDE devrait idéalement fournir un meilleur mécanisme pour gérer les combinaisons - mais c'est faisable, à peu près, et cela ne prend pas vraiment beaucoup de temps pour se mettre en place comme cela se sent à l'époque . (Si je comprends bien, .vsprops peut alléger le problème en permettant un partage facile des paramètres de configuration entre les configurations, de sorte que les minuscules zones de texte dans VS ne sont utilisées que pour configurer les paramètres qui diffèrent d'une configuration à l'autre. . peut les rendre encore utile d'examiner ce n'est pas quelque chose que je me suis encore utilisé, bien que, ne l'a découvert récemment)

+0

On dirait que MSBuild supporte les projets Visual C++ dans VS 2010, c'est la seule solution. – user76293

0

Si vous cliquez avec le bouton droit sur la solution dans Visual Studio et sélectionnez Configuration Manager, vous pouvez créer des cibles de construction pour chaque configuration.

Vous pouvez sélectionner ces cibles avec une zone de liste déroulante dans la barre d'outils si vous disposez des paramètres par défaut.

Ces cibles peuvent également être sélectionnées lors de l'utilisation de MSBuild, tout comme vous pouvez choisir entre Release et Debug.

+0

Cela ne répond pas à ma question. Je construis les mêmes projets, quelles que soient les bibliothèques externes utilisées, par ex. Si je veux utiliser Python, je ne compile pas Python dans le cadre de mon projet, je simplement #define HAVE_PYTHON et j'inclue/link les fichiers nécessaires. – user76293

1

Une approche pourrait être de faire référence à certaines conditions vos bibliothèques en utilisant l'attribut Condition de tous les ensembles . Référence élément (Python, MPI, etc).

Ceci pourrait séparer vos bibliothèques des propriétés de configuration et de plate-forme, et vous permettre de les construire par défaut, ou conditionnellement en utilisant les propriétés MSBuild.

Donc, dans votre csproj:

<Reference Include="YourPythonLibrary" 
      Condition="$(BuildType) == '' Or $(BuildType) == 'TypeA'" /> 
<Reference Include="YourMpiLibrary" 
      Condition="$(BuildType) == 'TypeA' Or $(BuildType) == 'TypeB'" /> 

Cela inclut Python par défaut et MPI que si le type de construction correcte est définie. Peu importe ce que la configuration ou la plate-forme est définie comme, et vous pouvez ajuster la logique booléenne en fonction de chaque bibliothèque pour chacun de vos types de construction.

MSBuild /p:BuildType=TypeA 
MSBuild /p:BuildType=TypeB 

Ce serait bien d'utiliser une certaine forme d'opération à la condition binaire, mais je ne suis pas sûr que ce soit possible dans MSBuild?

Remarque: N'a pas un élément de référence, si elle est simplement incluse en tant que contenu cette approche fonctionnera toujours.

+0

Cela fonctionnera pour les projets Visual C++? Je n'ai jamais utilisé MSBuild auparavant, donc je ne connais pas vraiment les détails ... – user76293

+0

Oh, je pensais que vous parliez du projet C#, désolé! Aucune idée à propos de C++, le schéma MSBuild est totalement différent, donc vous devrez parcourir http://msdn.microsoft.com/en-us/library/y4sy8216.aspx et voir si vous avez l'équivalent de l'attribut "Condition" pour votre type de référence particulier. – si618

+0

Juste un coup d'oeil rapide et "UseInBuild" attribut est un booléen de "AssemblyReference" élément, vaut la peine d'un tir? – si618