2010-04-27 6 views
17

SQLite und googeltest kommen mit einer sehr einfach zu bedienenden Single-File-Version, die es ein Kinderspiel macht, sie in anderen Projekten zu verwenden, da Sie nur eine einzige Quelldatei hinzufügen müssen. Beide benutzen die Home-Brew-Tools, um die kombinierte Quelldatei zu erstellen, also frage ich mich, ob es ein allgemeineres Tool dafür gibt? Es sollte eine Liste von Implementierungs-/Header-Dateien aufnehmen und einen kombinierten Header/Quelle ausgeben und die lokalen Includes reparieren. Mir geht es gut, wenn es keine bedingten Includes/Includes mit unterschiedlichen #defines vor ihnen wie Boost.Tuple/MPL verwendet. Eine typische Zielbibliothek wäre so etwas wie eine Intensivstation.Tool zum Erstellen einer Verschmelzung/Kombinieren aller Quelldateien einer Bibliothek in eine für C/C++?

+0

Welches Betriebssystem? –

+0

Windows oder Linux, vorzugsweise beides. Mir geht es aber gut, wenn das Tool nur auf einem von ihnen läuft. – Anteru

Antwort

3

Wenn Ihre Includes korrekt definiert sind (das heißt, es gibt Wächter in allen Header-Dateien, und jede Header-/Code-Einheit enthält alle benötigten Includes), dann können Sie es halb-manuell tun. Lokalisieren Sie den Systemheader, fügen Sie sie hinzu und kommentieren Sie sie. Erstellen Sie dann einen Header, der einfach alles in zufälliger Reihenfolge enthält und die Kopfzeile vorverarbeitet (in gcc gcc -E) und dann mit den Codeeinheiten ähnlich arbeitet.

Dieser manuelle Ansatz kann mühsam sein, aber wenn Sie es nur einmal tun müssen, wird es in Ordnung sein. Andererseits, auch wenn das Zusammenführen der Header-Dateien Sinn macht, möchte ich es lieber nicht tun. Ich würde die Dateien tatsächlich getrennt lassen, und wenn Sie das Gefühl haben, dass Sie den Zugriff darauf vereinfachen müssen, bieten Sie Bündel-Header an, die nur die anderen enthalten. Dies ist der Ansatz, den einige Boost-Bibliotheken verwenden, wo Sie die Details einfügen können, was Sie wollen, oder einen einzelnen Header, der alles andere enthält. Der Code kann in eine statische Lib kompiliert/verknüpft werden und so verwendet werden, als wäre es ein einzelnes Element.

1

Dies könnte eine Art interessant sein in ICU, die in einigen Fällen inkompatible definiert/enthält und Mischungen von C und C++ und eine Reihe von generierten Dateien. Vielleicht lassen Sie uns wissen, wie es geht?

(Offenlegung: icu Entwickler)

Verwandte Themen