it-swarm.com.de

Verwenden von Maven für C / C ++ - Projekte

Ich setze Maven um eine Ansammlung von amateurhaftem, schlecht geschriebenem und ehrlich gesagt primitivem C/C++ - Code (was etwas C, etwas C++ bedeutet). Das Problem ist, dass derzeit viel davon im Umlauf ist und nicht einfach ausgetauscht werden kann. Das Erstellen erfordert viel Stammeswissen (man muss von Würfel zu Würfel gehen, um herauszufinden, wie man verschiedene Teile kompiliert/baut) und das Freigeben ist ein absoluter Albtraum. (Nein - ich werde es nicht umschreiben, bitte nicht fragen) Meine Frage ist - sollte ich maven-native-plugin Verwenden, um eine Vielzahl kurzer Makefiles zu ersetzen, oder exec-maven-plugin Verwenden, um diese einfach auszuführen? Ich hatte ziemlich gute Erfahrung bisher mit letzterem .NET und weiß nicht, ob ich in das native -Plugin investieren oder bei exec bleiben soll? Wenn Sie Erfahrung mit "Mavenizing" C/C++ haben, würde ich gerne einen Rat einholen.

82
Bostone

Ich empfehle das Maven-Nar-Plugin . Ich finde es den Alternativen in vielerlei Hinsicht überlegen. Es ist nicht erforderlich, Quelldateien aufzulisten, es verarbeitet mehrere Betriebssysteme und Architekturen, es verarbeitet Unit- und Integrationstests und folgt im Allgemeinen dem "Maven Way". Es wird eine neue Art von Paketierung eingeführt - das NAR oder "native Archiv", das das Artefakt enthält, das Sie interessiert (.dll, .so, .a, .exe usw.), aber auch Metadaten, Header usw. in a Weg, der Sinn macht.

Es ist ein bisschen Vorarbeit erforderlich, um Software von Drittanbietern in NARs zu packen, aber es ist ziemlich unkompliziert. Sobald sie NARs sind, verwenden Sie einfach den normalen Maven-Abhängigkeitsmechanismus, um sich mit ihnen zu verbinden. Beispiel:

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

Ein Nachteil ist, dass es nicht aktiv gewartet zu werden scheint, aber es ist voll funktionsfähig und ein ziemlich beeindruckendes Beispiel für Maven-Plugin-Authoring.

89
SingleShot