6
votes

Existe-t-il un système de construction pour C ++ qui peut gérer les dépendances de libération?

Un peu d'arrière-plan, nous avons une base de code assez large, qui s'appuie dans un ensemble de bibliothèques - qui sont ensuite distribuées pour une utilisation interne dans divers binaires. Pour le moment, le processus de construction pour cela est le hasard et tout est construit sur le coffre.

Nous aimerions explorer s'il existe un système de construction qui nous permettra de gérer des versions et de tirer automatiquement des dépendances. Un tel outil existe pour Java, Maven. J'aime que ce mécanisme de paquet, de référentiel et de dépendance, et je sache qu'avec le plugin maven-natif ou maven-nar, nous pourrions obtenir cela. Cependant, le problème est que nous ne pouvons pas réparer les arbres source à la "voie mavenaire" - et malheureusement (au moins les plug-ins Maven-Nar) ne semblent pas aimer le code qui n'est pas structuré de cette façon ...

Donc, ma question est, existe-t-il un outil qui satisfait les éléments suivants pour C ++

  1. Construire
  2. paquet (par exemple, des bibliothèques avec tous les en-têtes, quelque chose comme le .nar)
  3. Télécharger le package vers un "référentiel"
  4. Tirez automatiquement dans les dépendances requises depuis ledit référentiel, extrayez les en-têtes et incluez dans la construction, les bibliothèques d'extraction et le lien. Les dépassaises seraient décrites dans la "version" pour ce binaire - donc si nous devions utiliser CI Server pour construire cette "version", le script de construction dispose des dépendances nécessaires énumérées (comme les fichiers POM.XML).

    Je pourrais rouler la mienne en modifiant soit des scripts + shell de shell ou waf / Scuons avec des modules de python supplémentaires pour la gestion de l'emballage et de la dépendance - Cependant, j'aurais pensé que ceci est un problème commun et une personne quelque part a un outil pour cela? Ou tout le monde roule-t-il leur propre? Ou ai-je manqué une caractéristique significative de waf / scons ou cmake?


    Edit: Je devrais ajouter, le système d'exploitation est préféré, et non-MS ...


0 commentaires

3 Réponses :


1
votes

La plupart des distributions Linux, par exemple, contiennent un suivi de dépendance pour leurs packages. De toutes les choses que j'ai essayé de piquer moi-même de prendre votre problème, à la fin, ils sont "pas tout à fait parfaits". La meilleure chose à faire, IMHO, est de créer un référentiel Yum / Deb local ou quelque chose (continuant mon exemple de Linux), puis tirez des objets de là au besoin.

Beaucoup de packages source vous disent également rapidement les composants minimaux qui doivent être installés pour effectuer une construction automatique (par opposition à l'installation d'un package pré-compilé binaire).

Malheureusement, ces méthodes sont plus faciles , bien que c'est mieux que d'essayer de le faire vous-même. À la fin, être à la plate-forme interrogatoire, vous avez besoin d'un de ces systèmes par système d'exploitation. Amusant!


1 commentaires

C'est aussi ma pensée actuelle, construisez un tar.gz ou quelque chose comme l'emballage, et utilisez un SCM en fait pour gérer les versions, la commande / la caisse, etc. Je suis surpris que rien n'existe ce qui ...



0
votes

Je ne suis pas sûr que je comprends bien ce que vous voulez, mais je vais vous dire ce que nous utilisons et espère que cela aide.

Nous utilisons CMAKE pour notre construction. Il convient de noter que Cmake est assez puissant. Entre autres choses, vous pouvez "faire installer" dans des annuaires personnalisés pour collecter des en-têtes et des binaires pour créer votre libération. Nous combinons cela avec des scripts python pour construire nos versions. YMMV, mais certaines choses pourraient simplement être trop spécifiques pour un outil générique et un script personnalisé peut être la solution plus simple.

Notre outil de construction construit des versions directement à partir d'une reformité SVN (caisse, construction, ...) que je peux vraiment recommander d'éviter que certains États locaux polluent la libération de manière imprévue. Il applique également la reproducabilité.


1 commentaires

Merci de votre réponse, la version de construction de SCM n'est pas un problème car notre CI fera cela. Ce que je suis plus après est un système de construction qui peut tirer dans les dépendances nécessaires (bibliothèques + en-têtes), d'un autre référentiel, pour la construction de cette version.



0
votes

Cela dépend beaucoup des plates-formes que vous ciblez. Je ne peux vraiment parler que pour Linux, mais il dépend également des distributions que vous ciblez, les packages étant un concept de niveau de distribution. Pour rendre les choses un peu plus simples, il existe des familles de distributions utilisant des mécanismes d'emballage similaires et des noms de paquets, ce qui signifie que la même recette de fabrication d'un package Debian fera également un paquet Ubuntu.

Je dirais certainement que si vous êtes prêt à cibler un sous-ensemble de toutes les distributions connues de Linux à l'aide d'un ensemble gérable de mécanismes d'emballage, vous bénéficierez à long terme de pas rouler le vôtre et des forfaits de construction de la manière dont les créateurs de distribution sont destinés. Ces systèmes vous permettent de spécifier des dépendances du temps d'exécution et de construction, et des environnements CI automatiques existent également (comme OBS pour les distributions basées sur RPM).


0 commentaires