web-dev-qa-db-fra.com

Comment gérer correctement les dépendances du projet C / C ++?

J'ai un projet qui utilise 3-4 bibliothèques open source Open Source C/C++.

J'ai construit ces bibliothèques pour plusieurs plates-formes et enregistré dans les fichiers incluent des fichiers et des libs statiques pour différentes plates-formes de mon projet.

Cependant, je lutterai avec quelques problèmes. Tous ces projets sont autour de la gestion de la dépendance. Et je cherche des conseils sur les meilleures pratiques.

1) Comment puis-je savoir à quoi dois-je utiliser exactement?

Je n'ai pas de moyen d'aller chercher une version d'une Lib statique. En conséquence, j'ai besoin d'une manière d'une manière ou d'une autre quelle version de Static Lib I utilise (peut-elle être SHA d'un commit sur lequel il a été construit)?

Ceci est particulièrement important lorsque j'ai besoin de comprendre quand mettre à niveau ces libs.

2) Comment puis-je reproduire la construction?

J'aurais pu difficilement de construire une bibliothèque spécifique pour une plate-forme spécifique. Il m'a fallu un moment pour le comprendre.

La prochaine fois que j'aurai besoin de construire la même bibliothèque pourrait être dans une demi-année (lorsque je devrai la mise à niveau de quelque raison que ce soit. Cependant, à ce moment-là, je ne me souvienai de rien et d'un environnement sur lequel il a été construit sera bien parti.

) devrais-je fourrer ces bibliothèques d'avoir une copie du code source?

C'est une préoccupation moindre. Cependant, c'est toujours une préoccupation. C'est bien de s'assurer que les constructions sont reproductibles (et ce type de code source requiert).

11
Victor Ronin

Avez-vous vraiment besoin d'utiliser une version exacte d'une bibliothèque à charge? Est-ce mal écrit/brisera-t-il l'API avec chaque augmentation mineure de la version?

Si vous regardez des projets open-source, leur construction (configure partie principalement) vérifie si diverses bibliothèques sont présentes et jette une erreur si non. Il est également suffisamment flexible pour permettre à l'utilisateur de créer un lien avec une version plus récente de la bibliothèque (qui fournit probablement plus de corrections de bugs/de sécurité qu'à une personne âgée) et n'applique pas la liaison statique ou dynamique.

Si vous avez vraiment besoin de constructions reproductibles, vous devez également faire attention à la version exacte du compilateur et ses bibliothèques standard, peut-être même le système d'exploitation. Dans ce cas, avoir une machine de construction avec l'environnement exact dont vous avez besoin est, à mon avis, mieux que de vérifier les bibliothèques compilées dans le référentiel de code source.

5
D. Jurcau