Quelle est la meilleure façon d’organiser mon code de projet C et ses bibliothèques externes?

Je commence un nouveau projet C, basé en grande partie sur un logiciel libre. Ce sera également sur SourceForge, et j’aimerais profiter de cette occasion pour apprendre les meilleures pratiques établies pour l’organisation de ce type de code. J’utilise des bibliothèques comme libcurl et libz, et je vais le comstackr avec MinGW et MSYS.

Je dissortingbuerai des copies de la source de toutes les bibliothèques que j’utilise avec mon projet, afin que les personnes téléchargeant la source n’auront pas à fouiller et à chercher des dépendances. Comment dois-je appeler le répertoire dans lequel je stocke les bibliothèques? Jusqu’à présent, j’hésite entre:

  • lib, car ce sont des bibliothèques. Cependant, “lib” a une connotation différente dans UNIX-world.
  • src, car ce sont des fichiers source.
  • 3ème partie, parce que je ne l’ai pas écrit.

Et où devrais-je comstackr ces bibliothèques? Devrais-je simplement les configurer et les installer à la racine du système, ou devrais-je configurer un répertoire dans lequel toutes les bibliothèques devraient comstackr et relier à partir de là? Évidemment, cela aura des conséquences pour mon Makefile.

Comment dois-je m’y prendre? Y at-il des conventions établies que je devrais suivre? Sont-ils écrits quelque part?

Premièrement, pour les bibliothèques externes, j’utiliserais l’ vendor , mais ce n’est qu’une préférence.

Deuxièmement, je ne pense pas que ce soit une bonne idée d’installer d’ autres bibliothèques à la racine du système, sans que les utilisateurs ne le sachent. Surtout parce que cela sera en conflit avec les versions ultérieures de ces bibliothèques. Je pense donc que le meilleur endroit pour ces bibliothèques serait dans le même répertoire que votre application.

Vous pouvez également comstackr statiquement ces bibliothèques dans votre programme.

Lors d’un travail précédent, la norme consistait à les installer dans un répertoire nommé 3rdparty et à créer les bibliothèques à cet emplacement (dans 3rdparty / LIBNAME / Debug, etc.).

Nous utilisons quelque chose avec le suffixe _ext ou _EXT (c.-à-d. MyProject_EXT) pour indiquer qu’il est externe à notre projet de stocker le code source des packages externes auxquels nous lions.

Je suis d’accord avec Peter. Les bibliothèques externes ne doivent pas être intégrées à la racine du système car elles peuvent provoquer des conflits. Je les construirais dans leur répertoire, puis les installerais dans un répertoire / lib (ou peut-être / extlib) propre à votre application et y établirais un lien.

N’envoyez pas de sources tierces avec votre code, que ce soit dans la source ou liées statiquement aux fichiers binarys, ou de toute autre manière. Cela va simplement interférer avec d’autres copies de la même chose, et ne sera pas mis à jour lorsque la bibliothèque devra être corrigée. Dites à l’utilisateur quelles sont les exigences (et restz au fait des modifications de l’API dans la bibliothèque!). Un utilisateur auto-compilant s’assurera d’obtenir les dépendances, une dissortingbution s’assurera que votre paquet fonctionne avec la version fournie.