2010-08-31 3 views
11

Je contribue à un decent-sized C++ project avec un certain nombre de dépendances. Le problème est que le projet contient la source de toutes ses dépendances (par exemple pcre, zlib, etc.). Je veux réduire le projet à ce qui est pertinent pour le programme lui-même. Existe-t-il un moyen relativement standard de compiler ces bibliothèques et de les mettre quelque part, et d'avoir leurs fichiers d'en-tête aussi facilement accessibles?Où dois-je mettre les bibliothèques tierces?

Pour ce que ça vaut, j'utilise Windows 7, et je développe en utilisant VS2005. Je suis également un expert complet pour travailler sur de grands projets C++ sous Windows; Je n'ai jamais vraiment eu besoin de sortir de la bibliothèque standard et win32.

+4

Ce commentaire ne sera d'aucune aide, je ne le donnerai donc pas comme réponse. Linux/etc a cela plus compris. Il existe src, lib, bin, include et d'autres noms de répertoires standard. Lorsque vous écrivez une bibliothèque sous Windows, vous placez les en-têtes, la source, etc. de votre bibliothèque là où vous avez envie de les placer, et vous vous attendez à ce que le monde se conforme à vous. Certaines des bibliothèques que vous avez mentionnées sont disponibles sous Linux, donc utilisez probablement le schéma de répertoire standard –

+0

Hmm ...C'est un bon point. J'imagine que les bibliothèques compilées vont dans lib et/ou bin (selon DLL/LIB-ness), et le code de l'application va dans src? J'aime ça. – Twisol

+3

@Merlyn: Je trouve amusant que Linux ait des emplacements standards pour mettre des bibliothèques C et inclure des fichiers, mais pas d'endroit standard où les * binaires * sont stockés. Gah! +1 pour commenter –

Répondre

7

Une structure que nous utilisons sur mon lieu de travail est d'avoir un dossier « externe » qui contient un dossier « Inclure » et un « Lib » pour les en-têtes et les bibliothèques externes. Cependant, comme nous utilisons aussi VS, nous essayons d'utiliser le plus possible sa fonction "Dépendances", supprimant les entrées manuelles dans l'éditeur de liens. Cela signifie que seuls les projets qui ne sont pas sous la même solution vont dans le dossier "Externe". De plus, comme nous avons des bibliothèques tierces spécifiques à certains projets, nous créons des dossiers dans le dossier du projet pour ces includes et libs. Voici comment il obtient:

 
.\ 
|-Project1\ --> contains Project1.vcproj 
|-Project2\ --> contains Project2.vcproj 
| |-Third-Party\ 
| |-Include\ 
| |-Lib\ 
|-External\ 
| |-Include\ 
| |-Lib\ 
|-InternalLibrary\ --> contains InternalLibrary.vcproj 
|-Solution.sln --> includes the vcproj's and link them as necessary by its dependencies 

Je ne peux pas dire si cela est la meilleure structure jamais, mais tout est sous contrôle de code source, nous pouvons faire la nuit construit juste en construisant la solution, et le développement va en construisant unique projets.

1

Il y a une erreur dans votre déclaration: «Je veux réduire le projet à ce qui est pertinent pour le programme lui-même." Croyez-moi, les dépendances sont extrêmement pertinentes pour le programme. Si vous ne les avez pas dans le contrôle des sources, vous ne rencontrerez pas de fin de problèmes lors de l'introduction de nouveaux membres de l'équipe ou lors du passage à un nouveau poste de travail.

Même si vous compilez les bibliothèques "non-pertinentes", ces bibliothèques compilées devraient aller dans votre référentiel source.

+0

D'accord ... J'aurais dû dire "code spécifique à l'application". Je comprends votre point, cependant. Mais quelle est la meilleure façon de structurer cela? En ce moment, tout est dans un seul projet. Est-ce que je devrais le diviser en projets distincts sous la même solution, ou y a-t-il un meilleur moyen? Honnêtement, je n'ai aucune idée des meilleures pratiques ici, et je n'ai rien trouvé avec Google. – Twisol

+1

Je ne suis pas entièrement d'accord avec cela. Une installation Boost, une fois les externes compilés, est d'environ 5 Go (10 Go si vous devez supporter VS2010 et VS2008). C'est déraisonnable d'avoir sous contrôle de la source. –

0

J'ai des groupes vus effectuer les tâches suivantes:

  • code interne séparé de code externe (code qu'ils ont fait contre des sociétés externes)
  • séparé leur code à partir de la bibliothèque
  • séparée de chaque programme et chaque bibliothèque
  • Archivez une version compilée de leurs dépendances, de sorte qu'elle ne fasse pas partie de leur cycle de construction complet (au moins, pas dans certaines branches.) Les autres branches peuvent effectuer une construction plus complète)

Des projets existaient pour chaque exe ou bibliothèque, dans le répertoire avec l'exe/bibliothèque.

Des solutions existaient partout où les équipes pensaient que cela serait bénéfique, et les binaires étaient souvent liés, plutôt que leurs projets inclus dans les sous-solutions. Seule une construction complète était garantie de ne pas rompre avec un nouvel engagement.

caveat emptor ...

Questions connexes