89 votes

Utilisation de Maven pour les projets C/C++

Je suis en train de construire Maven autour d'un groupe de code C/C++ amateur, mal écrit et franchement primitif (c'est-à-dire un peu de C, un peu de C++). Le problème est qu'il y en a beaucoup en circulation actuellement et qu'il n'est pas facile de le remplacer. Sa construction nécessite beaucoup de connaissances tribales (il faut aller de cube en cube pour savoir comment compiler/construire les différentes parties) et son lancement est un véritable cauchemar. (Non - je ne vais pas le réécrire, s'il vous plaît ne demandez pas) Ma question est la suivante : dois-je utiliser maven-native-plugin pour remplacer la multitude de makefiles courts ou utiliser exec-maven-plugin pour simplement les exécuter ? J'avais très bonne expérience jusqu'à présent avec le dernier faisant du .NET et je ne sais pas si je dois investir dans native ou rester avec exec ? Si vous avez l'expérience de la "mavenisation" de C/C++, j'aimerais avoir des conseils.

0 votes

Je suis sur le point de l'essayer. Je vois qu'il est toujours maintenu et qu'il s'est déplacé entre-temps ici : github.com/sonatype/maven-nar-plugin

92voto

SingleShot Points 9258

Je recommande vivement le maven-nar-plugin . Je le trouve supérieur à bien des égards aux autres solutions. Il n'a pas besoin de lister les fichiers sources, gère plusieurs systèmes d'exploitation et architectures, gère les tests unitaires et d'intégration, et suit généralement "la méthode 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 les métadonnées, les en-têtes, etc. d'une manière qui a du sens.

L'intégration de logiciels tiers dans les NAR nécessite un peu de travail en amont, mais c'est assez simple. Une fois qu'ils sont des NAR, il suffit d'utiliser le mécanisme normal de dépendance de Maven pour créer des liens avec eux, par exemple :

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

L'un de ses inconvénients est qu'il ne semble pas être activement maintenu, mais il est complet et constitue un exemple assez impressionnant de création de plugins Maven.

0 votes

Merci pour le conseil - je vais certainement le vérifier !

0 votes

Je vais accepter cela comme réponse - cela semble en effet être supérieur à maven-native-plugin

0 votes

Bonne chance. Une chose à noter : j'ai reçu une notification ce matin (quelle coïncidence) indiquant qu'un bogue que j'ai soumis il y a un an a été résolu aujourd'hui - la maintenance semble avoir été réactivée.

1voto

Chris Hess Points 36

Pour avoir un équivalent à Maven (Java). Mon conseil est d'utiliser CMake + CPM pour la construction et la gestion des PKG, les outils les plus communs utilisés dans le monde C++. Comme alternative, Gradle existe aussi pour le C++.

lien utile : https://medium.com/swlh/cpm-an-awesome-dependency-manager-for-c-with-cmake-3c53f4376766

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X