2008-09-28 7 views
5

Ich habe ein Projekt, an dem ich arbeite (für die Schule), dass ich in die Boost-Bibliotheken für die Lösungen graben. Ich brauche eine Möglichkeit, den benötigten Boost-Quellcode mit meiner Anwendung zu verteilen, damit er kompiliert werden kann, ohne dass die Bibliotheken auf dem kompilierenden System installiert werden müssen. (Schule Computer fehlt fast alles, was Sie erwähnen können. Die Schule installiert CVS im letzten Jahr. Aber sie haben VS2005)Einschließlich relevante Boost-Bibliotheken mit C++ - Quelle (mit Visual Studio)

Hinweis: Ich verwende Visual Studio 2005 auf Vista. Ich habe Boost 1.34.1 auf meinem System habe ich die automatic installer verwendet. Die Dokumentation, auf die ich gestoßen bin, sagt etwas über die Verwendung des BCP-Befehls aus, aber dieser Befehl scheint nichts zu kopieren. (Ich verwende absoluten Pfad, um BCP anzurufen, damit ich nicht den falschen Befehl anrufe.)

Edit: Ich versuche, die RegEx-Bibliotheken zu verwenden.

Edit: Der Befehl, den ich für BCP bin mit ist: "c:\Program Files\boost\boost_1_34_1\bin\bcp.exe" boost/regex.hpp regex\

Und es gibt: no errors detected

+0

Können Sie den Befehl zum Ausführen von bcp posten? Dies könnte helfen, das Problem zu identifizieren. –

Antwort

5

Es ist auf der Bibliothek ab, die Sie verwenden. Wenn Sie eine Nur-Header-Bibliothek verwenden (die meisten der Boost-Bibliotheken sind einige bemerkenswerte Ausnahmen, Signale, Serialisierung und Datum/Uhrzeit), können Sie diese Header-Dateien einfach kopieren. Andernfalls müssen Sie auch die cpp-Dateien kopieren. Mein Vorschlag ist, sie einfach in Ihr Projekt aufzunehmen.

Also, was Sie tun: Sie entfernen den Boost-Include-Pfad von Ihren Projekteinstellungen (Tool-> Optionen-> Projekte und Lösungen-> VC++ Verzeichnisse-> Include-Dateien). Versuchen Sie zu kompilieren. Schau dir an, welches include fehlschlägt. Kopieren Sie diese Datei von Ihrem Boost-Verzeichnis in Ihr Projektverzeichnis. Schütten, spülen, wiederholen, bis Ihr Projekt kompiliert.

Wenn Sie eine Bibliothek verwenden, für die CPP-Dateien erforderlich sind, wird bei der Verbindungszeit ein Fehler angezeigt. Kopieren Sie alle CPP-Dateien der Bibliothek, die Sie verwenden, in Ihr Projektverzeichnis und fügen Sie sie zu Ihrer Lösung hinzu. Bauen Sie die Finger neu auf und kreuzen Sie sie.

Für eine ausführlichere Antwort, bitte posten welche Bibliotheken Sie verwenden.

+0

Ich verwende die RegEx-Bibliothek. – epochwolf

0

Ich bin schon mal darauf gestoßen, Boost in meine Projekte eingebettet. Jede einzelne Boost-Bibliothek enthält verschiedene Projektdateien für die Erstellung mit verschiedenen make-Systemen (Jam, make, Visual Studio 6 ...), aber sie sind nie so gut mit den neueren Versionen von VS.

Ich bevorzuge es immer, eine neue Projektdatei zu erstellen und Boost direkt in mein Projekt einzubetten. Es ist ziemlich einfach, Sie müssen nur alle Quelldateien hinzufügen und die Projektoptionen richtig einstellen. Es gibt jedoch einen Vorbehalt, und das heißt, Sie müssen die Bibliotheks-Ausgabedatei so benennen wie boost, weil ihre Include-Dateien davon abhängen.

Sobald Sie dies getan haben, können Sie die Boost-Bibliotheken genau wie alle anderen Dateien in Ihrem Projekt verteilen.

1

Dies scheint ein bisschen seltsam für mich. Wenn Sie Quellcode verteilen, sollten die Personen, an die Sie den Quellcode verteilen, Boost installieren können. Dann, wenn sie bereits Boost haben, gibt es keine Duplizierung und Verwirrung, oder wenn sie es nicht tun und Sie eine gebaute Bibliothek benötigen, werden sie die richtige Bibliothek für ihr System erstellen. Wenn die Leute, die Sie verteilen, Boost nicht installieren können, würde ich vorschlagen, Binaries in einem Installationspaket zu verteilen, um es ihnen so einfach wie möglich zu machen.

+0

Er sagt, es ist für ein Schulprojekt. Leute, die ihre Aufgaben nicht erfüllen, werden keine Bibliotheken für Projekte installieren, sie würden tagelang damit verbringen, mit diesen Bibliotheken für die verschiedenen Schüler zu spielen. Zuweisungen müssen normalerweise in sich abgeschlossen sein. – Roel

+0

Roel hat das richtig. Ich muss die Bibliothek mit dem Rest des Quellcodes einbetten. – epochwolf

2

Try bcp mit diesem Befehl aufrufen:

"c:\Program Files\boost\boost_1_34_1\bin\bcp.exe" --boost="c:\Program Files\boost\boost_1_34_1" regex regex 

--boost bcp sagt, wo Schub installiert ist, ist der erste regex den Namen der Module, das zweite ist das Zielverzeichnis.

Oh, und wenn Sie nicht schon bemerkt haben, gibt es Visual C++ Makefiles in libs\regex\build\.

+0

Danke, werde es versuchen. Wenn es einen Unterschied macht, verwende ich Standard-C++, nicht die Erweiterung von Microsoft. – epochwolf

2

Basierend auf Ihrem Kommentar, dass Sie Regex verwenden, hier ist, was Sie tun: Laden Sie die 'normale' Boost-Distribution-Zip-Datei. Entpacken Sie es irgendwo. Gehe zu libs/regex/src. Kopieren Sie alle CPP-Dateien in diesem Verzeichnis und fügen Sie sie in Ihr Projektverzeichnis ein. Fügen Sie sie zu Ihrem Visual Studio-Projekt hinzu (klicken Sie mit der rechten Maustaste auf 'Hinzufügen' -> 'vorhandenes Element'). Dann gehe zu Boost/Regex und kopiere alles darin (die Header-Dateien) in dein Projektverzeichnis (einschließlich der Unterverzeichnisse). Ändern Sie alle Includes in Ihren eigenen .cpp- und .h-Dateien von #include in "regex.hpp", damit die Header aus Ihrem lokalen Verzeichnis und nicht die, die systemweit installiert wurden, enthalten. Stellen Sie sicher, dass Sie den systemweiten Include-Pfad aus Ihren Projekteinstellungen entfernen, wie ich es in meinem letzten Post gesagt habe.

Dann kompilieren Sie Ihren Code. Sie erhalten eine Reihe von 'fehlende Include-Datei'-Fehler, da Regex von anderen Boost-Bibliotheken abhängig ist. Wiederholen Sie den gesamten Vorgang: Gehen Sie zu boost/xxx, wobei xxx die Bibliothek ist, nach der regex sucht. Sie können die Bibliothek aus der Fehlermeldung ableiten. Kopieren Sie alles, nach dem der Compiler fragt, in Ihr eigenes Projektverzeichnis. Möglicherweise müssen Sie ein wenig mit Ihrem Verzeichnis-Layout fiedeln, bevor es funktioniert. Es ist ein Schritt-für-Schritt-Ansatz, bei dem jeder Schritt derselbe ist: Identifizieren Sie die fehlende Datei, kopieren Sie sie, prüfen Sie, ob das Include gefunden und repariert wurde, und fahren Sie mit dem nächsten Schritt fort. Das ist langweilige Arbeit, fürchte ich.

Sie könnten dies alles mit bcp automatisieren, aber für ein einmaliges Projekt wie ein Schulprojekt würde ich nicht stören; nur wenn Sie denken, dass Sie zukünftige Projekte haben werden, bei denen Sie eine eigenständige ZIP-Datei bereitstellen müssen.

+0

Ich werde wahrscheinlich Boost in zukünftigen Projekten verwenden. Dem Professor macht es nichts aus. – epochwolf

+0

Sie können buchstäblich Stunden damit verbringen, solche Abhängigkeiten zu entdecken. [bcp] (http://www.boost.org/doc/libs/1_46_1/tools/bcp/doc/html/index.html) ist eine viel narrensicherere Methode, dies zu tun. Außerdem ist es viel besser, einen Include-Pfad hinzuzufügen als die Include-Pfade zu bearbeiten - für einige Boost-Teilmengen gibt es Tausende zu bearbeiten. –

0

Es ist so ein PITA Boost zu kompilieren; Nur die motivierten Studenten werden es schaffen. Haben Sie darüber nachgedacht, das Installationsprogramm zu bündeln?

+0

Ich habe gerade die vorkompilierten Debug-Bibliotheken in den richtigen relativen Ordner ausgegeben. – epochwolf

+0

Ich habe eine Reihe von ihnen auf meiner Website: http://boost.teeks99.com – teeks99