web-dev-qa-db-fra.com

Utilisation de Maven pour les projets C / C ++

Je mets Maven autour d'un cluster de code C/C++ amateur, mal écrit et franchement primitif (c'est-à-dire du C, du C++). Le problème est - il y en a beaucoup en circulation actuellement et ne peut pas être facilement remplacé. La construire nécessite beaucoup de connaissances tribales (vous devez passer d'un cube à l'autre juste pour savoir comment compiler/construire diverses parties) et la libération est un véritable cauchemar. (Non - je ne vais pas le réécrire, ne le demandez pas) Ma question est - dois-je utiliser maven-native-plugin pour remplacer une multitude de makefiles courts ou utiliser exec-maven-plugin pour les exécuter simplement? J'ai eu assez bonne expérience jusqu'à présent avec ce dernier faisant .NET et je ne sais pas si je dois investir dans le plugin native ou rester avec exec? Si vous aviez de l'expérience avec "Mavenizing" C/C++, j'aimerais avoir quelques conseils.

82
Bostone

Je recommande fortement le maven-nar-plugin . Je le trouve supérieur à bien des égards aux alternatives. Il ne nécessite pas de répertorier les fichiers source, gère plusieurs systèmes d'exploitation et architectures, gère les tests unitaires et d'intégration et suit généralement "la voie maven". Il introduit un nouveau type de packaging - le NAR, ou "archive native", qui contient l'artefact qui vous intéresse (.dll, .so, .a, .exe, etc.) mais aussi des métadonnées, des en-têtes, etc. dans un façon qui a du sens.

Cela nécessite un peu de travail initial pour intégrer des logiciels tiers dans des NAR, mais c'est assez simple. Une fois qu'ils sont des NAR, vous utilisez simplement le mécanisme de dépendance Maven normal pour établir un lien avec eux, par exemple:

<dependency>
  <groupId>cppunit</groupId>
  <artifactId>cppunit</artifactId>
  <scope>test</scope>
</dependency>

Un inconvénient est qu'il ne semble pas être activement maintenu, mais il est complet et constitue un exemple assez impressionnant de création de plug-ins Maven.

89
SingleShot