Angenommen, ich habe ein C ++ - Projekt, das in mehrere Teilprojekte aufgeteilt ist. Das Teilprojekt erzeugt alle eine DLL, und verschiedene Entwicklerteams arbeiten an jedem Teilprojekt. Wenn ich nun das Hauptprojekt erstellen möchte, gibt es eine Möglichkeit, zu vermeiden, dass alle Teilprojekte selbst erstellt werden müssen?
Kurz gesagt, ich suche nach etwas, das das Abhängigkeitsmanagement (dh für Binärdateien und Header) auf ähnliche Weise wie Maven für Java ausführt.
Tatsächlich habe ich versucht, Maven dafür zu verwenden, aber das ist ziemlich umständlich, da ich die Pakete manuell und ziemlich häufig erstellen muss. Maven vermisst es, die letzten Änderungen zu übernehmen. Außerdem ist das Ausführen der Kompilierung ein kleiner Hack, da ich NAnt in Maven aufrufen muss (ich verwende die Funktion von NAnt, um Visual Studio-Lösungen direkt zu erstellen).
Irgendwelche Hinweise und Ideen dazu?
quelle
maven
, Sie verpassen den ganzen Punktmaven
oder vor 10 Jahren, als ich nichtmaven
für C ++ verwendet habe, war es für C ++ weitaus weniger nützlich. Ich kann nicht für 2009 sprechen, aber in den letzten Jahren aus Erfahrungmaven
würden Sie genau das für das Problem verwenden, das Sie beschreiben. Es macht genau das, was Sie wollen, und das ziemlich effizient und gut, und es macht nicht die negativen Dinge, von denen Sie behaupten, dass es sie tut. Wer dies 2019 oder später liest, sollte nachdrücklich in Betracht ziehen, esmaven
für diesen Zweck zu verwenden.Antworten:
Erste Antwort : Ich würde die Verwendung von CMake vorschlagen. Es handelt sich um einen plattformübergreifenden Generator für Make-Dateien (generiert auch Visual Studio- oder Eclipse-CDT-Projekte).
http://www.cmake.org/
Ich habe wirklich gute Erfahrungen damit gemacht. Das Beste, was mir daran gefällt, war die Fähigkeit, eine generische Projektstruktur zu erstellen. So können Sie generisch die Suche nach Unterprojekten für Komponententests usw. einschließen, ohne das Skript jedes Mal zu ändern.
Sie haben auch viele Module zum Auffinden vorinstallierter Build-Bibliotheken, die für das Projekt erforderlich sind (wie Boost, QT usw.).
Update : In der Zwischenzeit gab es einige Anstrengungen, um die Paketverwaltung für C ++ einzuführen. Einige sehenswerte Projekte:
Beachten Sie, wie von @RAM in den Kommentaren hervorgehoben, dass cpm nicht mehr aktiv gepflegt wird.
quelle
Für das Abhängigkeitsmanagement gibt es ein neues Projekt (es ist ein Startup-Unternehmen), das diese Art von Tool implementiert: https://github.com/biicode (ein C ++ - Abhängigkeitsmanager). Sie könnten Ihre Abhängigkeiten hinzufügen und es sollte funktionieren.
Derzeit heißt das Projekt conan.io , sie wurden von JFrog übernommen .
UPDATE: Das Projekt ist tot ... Leider scheint es, dass das Startup nicht genug Premium-zahlende Kunden bekommen konnte, aber der Server scheint gut zu funktionieren ...
UPDATE2: Es scheint, dass es ein Ersatzprojekt gibt: conan.io (danke @mucaho)
quelle
Ich empfehle die folgenden High-Level-Build-Systeme:
quelle
Wenn Sie nur das Abhängigkeitsmanagement wünschen, versuchen Sie es mit Ivy , es lässt sich gut in Ant integrieren (und ich gehe davon aus, dass NAnt dasselbe auf der Grundlage dieses Blogs tun kann , das von der Ivy-Site verlinkt ist).
Es gibt auch Byldan , eine .NET-Version von Maven. Ich weiß nicht, wie gut das für Sie funktionieren wird.
quelle
Make und GCC sind eine großartige Kombination für eine wirklich gute Abhängigkeitsprüfung.
GCC kann automatisch 'make'-Abhängigkeitsdateien generieren (-MD-Befehlszeilenschalter), um beispielsweise alle Quelldateien neu erstellen zu können, die von einem bestimmten Header abhängen.
Ich habe einige einfache Regeln, die ich in meine Makefiles ausschneide und einfüge:
Wenn Ihre Objektdateien beispielsweise in einer OBJ_C- und einer OBJ_CPP-Liste deklariert sind:
Make kann natürlich Abhängigkeiten von anderen Projekten und dergleichen verfolgen, z. B. bei Bedarf auch eine gemeinsame Bibliothek neu erstellen.
Wenn Ihre anderen Teams beispielsweise ihre neuesten DLLs immer in einem freigegebenen Ordner ablegen:
quelle
${CC} ${CFLAGS} -c $< -MD -MF $(<:%.c=%.dep) -o $@
Es fiel mir schwer, all diese Make-Symbole zu analysieren. Es sieht so aus, als würde dies in etwa so aufgelöst, alsg++ -c main.cc -MD -MF test
ob Sie es eigenständig über die Befehlszeile ausführen möchten, und die Ergebnisse werden in einer Datei mit dem Namen "test" abgelegt.Ich empfehle Conan , das ich in diesen Tagen verwendet habe. Es ist sehr leistungsfähig, alle abhängigen Bibliotheken und Binärdateien in Ihrem Projekt zu verwalten.
quelle
Bearbeiten:
Biicode ist veraltet
Alternative: Conan.io
quelle
Sie können ein NuGet-Paket für verwendete Bibliotheken erstellen und NuGet für das Abhängigkeitsmanagement verwenden.
Siehe auch NuGet für C ++
quelle
Auf SCons befinden sich eine Reihe von Tools, die ähnliche Funktionen wie Autotools auf höherer Ebene bieten und den Entwicklern das Leben erleichtern sollen (z. B. WAF, SNOCS). Leider hat SCons selbst den Hauptnachteil - längere Kompilierungszeit für die großen Projekte.
Ich kann empfehlen, SNOCS (ein umgekehrter SCons) für diejenigen unter Ihnen auszuprobieren, die ein einfaches Abhängigkeitsmanagement suchen und Kompilierungsoptionen im einzelnen Befehl auswählen möchten (Compiler, x86 / x64, Debug / Release, statische / gemeinsam genutzte Bibliotheken, Test / Ziele installieren usw.).
SNOCS versucht auch, das Problem der langen Kompilierungszeit zu lösen, indem die Projektkonfigurationsausgabe in den separaten Dateien gespeichert wird. Dadurch können die nachfolgenden Builds die Konfigurationsphase insgesamt überspringen und direkt zur Bauphase übergehen (die letzte Funktion befindet sich derzeit im Aufbau).
Die Konfiguration von CMake wird in größeren Lösungen mühsam, sodass die Wartung des Build-Systems einen großen Teil der Entwicklerzeit in Anspruch nimmt. Glücklicherweise gibt es, wie Martijn bereits erwähnte, einen Biicode, der "CMake verwendet, um Ihr Projekt mit seinen Abhängigkeiten zu generieren".
quelle
Versuchen Sie SCons
SCons ist ein Open Source-Software-Konstruktionstool, dh ein Build-Tool der nächsten Generation. Stellen Sie sich SCons als verbesserten, plattformübergreifenden Ersatz für das klassische Make-Dienstprogramm mit integrierten Funktionen vor, die Autoconf / Automake- und Compiler-Caches wie Ccache ähneln. Kurz gesagt, SCons ist eine einfachere, zuverlässigere und schnellere Möglichkeit, Software zu erstellen.
quelle
Ich empfehle, die Mutter aller Build-Abhängigkeitssysteme zu verwenden: make.
quelle
Versuchen Sie Scons, Sie werden süchtig. Make ist veraltet, schwierig und teuer zu warten.
quelle