2010-10-07 5 views
0

J'ai un projet C++ multiplate-forme. Dans ce projet, nous utilisons plusieurs bibliothèques tierces compilées statiquement qui sont assez volumineuses et difficiles à construire.Inclusion de bibliothèques précompilées dans l'arborescence source

Actuellement, notre arbre source ressemble à ceci:

| 
+-3rdparty 
| +-include (initially empty) 
| +-lib  (initially empty) 
| +-some-library 
| +-another-library 
| 
+-source 

Lors de la vérification du code, un développeur devrait d'abord construire et installer « une bibliothèque » et « une autre bibliothèque ». L'étape d'installation mettrait les bons fichiers dans les dossiers include et lib, puis ils peuvent construire notre projet. Afin de faciliter la construction de notre projet, je pensais supprimer "some-library" et "another-library", et simplement mettre les includes et les binaires pré-compilés dans des dossiers include et lib. De cette façon, un nouveau développeur devrait simplement vérifier le projet et le construire immédiatement.

Mes questions sont les suivantes:

  1. Est-ce une mauvaise pratique de le faire? (ie: inclure des bibliothèques précompilées dans votre arbre source).

  2. Quels sont les problèmes/inconvénients potentiels de cette configuration?

  3. Quelle est l'organisation des dossiers que vous proposez de prendre en compte pour les différentes plates-formes (Windows, Mac OSX et Linux)?

Note supplémentaire: nous utilisons Mercurial.

+2

duplication possible de [Can (Should)) je mets les bibliothèques tierces dans le contrôle de version?] (Http://stackoverflow.com/questions/1710027/can-should-i-put-3rd-party-libraries-in- version-control) – durron597

Répondre

1

J'ai travaillé avec des systèmes de contrôle de version qui refusaient absolument de conserver les anciennes versions de fichiers binaires. C'était il y a longtemps, et je ne pense pas que ce soit un problème avec les VCS actuels, mais vérifiez avant d'aller vivre avec l'idée.

Si la bibliothèque tierce est souvent mise à jour, votre référentiel peut devenir très volumineux. Mis à part cela, je l'ai vu faire, et vu le travail.

+0

Merci pour le rappel sur le dépôt grandissant avec des mises à jour fréquentes de la bibliothèque. – gregschlom

1

Bien que vous essayiez d'être multi-plateforme, mais regrouper les dépendances avec votre source est livré avec plusieurs problèmes.

  • Puisque vous parlez de bâtiment les dépendances, comment comptez-vous assurer que le code compilé peut fonctionner sur la machine d'un développeur? Je doute que le code de Windows fonctionnera sous Os X, peut-être même pas le Fedora Linux Rawhide sous Debian Linux.

  • Si les dépendances sont déjà installées sur mon système, comment puis-je désactiver l'installation de vos versions? Et pourquoi voudrais-je les télécharger dans le check-out? Si vous envisagez d'inclure ce code dans une distribution Linux, les gestionnaires de paquets vous poseront des questions sur le couplage étroit que vous avez introduit car votre approche est moins nécessaire dans le monde Linux où les bibliothèques partagées fonctionnent plutôt bien.

Bien sûr, votre approche est suivie dans beaucoup d'endroits, grands et petits, mais pourquoi devriez-vous répéter leurs erreurs?Si vous avez vraiment besoin de fournir à vos développeurs un raccourci pour installer ces dépendances, vous devez écrire un script configurable qui installe les dépendances dans un préfixe. Et ajoutez des drapeaux pour désactiver l'installation de dépendances spécifiques.

+0

Merci, vous faites remarquer à un certain nombre de problèmes spécifiques à Linux que je ne connaissais pas, étant plus un gars de Windows. – gregschlom

+0

Une chose que j'ai oublié de mentionner: ce n'est pas un projet open-source. Donc, les seuls développeurs qui travaillent dessus sont notre équipe de 3 personnes. Mais votre point de vue sur les bibliothèques partagées qui sont favorisées sur Linux est vraiment quelque chose que nous devons garder à l'esprit. – gregschlom

Questions connexes