Im Rahmen meiner Recherchen schreibe ich viel Python- und MATLAB-Code, der niemals an andere verteilt werden muss. Selbst wenn ich meine Software verteilen muss, machen Python und MATLAB, die beide interpretiert werden, das Teilen relativ einfach.
Jetzt schreibe ich eine Software in C ++, die ich verteilen möchte. Ich habe einen Überblick darüber, wie die Software auf meinem eigenen Computer kompiliert wird, aber ich habe kein Verständnis dafür, was getan werden muss, um anderen Menschen die Software zu geben.
Zunächst mehr zu meinem Projekt: Ich schreibe Code, um Visualisierungen zu berechnen und anzuzeigen. Das Projekt basiert auf Grafiken, daher verwende ich die LEMON-Grafikbibliothek. Ich untersuche VTK- und OpenGL-Implementierungen, um die Visualisierung anzuzeigen. Ich möchte Python- und MATLAB-Bindungen für Benutzer dieser Umgebungen schreiben, um meine Software verwenden zu können, und ich möchte Windows- und Linux-Versionen erstellen (ich habe noch nicht an OS X gedacht ...).
Nehmen wir als Beispiel die LEMON-Diagrammbibliothek. Es ist eine Reihe von Headern zusammen mit einem kleinen gemeinsamen Objekt. Auf meinem Entwicklungssystem kompiliere ich die Bibliothek mit CMake und verknüpfe sie mit meinem Projekt.
Angenommen, ich möchte meine Software jemandem geben, der unter Windows ausgeführt wird. Ich möchte, dass sie ein Installationsprogramm herunterladen, auf ein oder zwei Schaltflächen klicken und sich um alles kümmern können. Ich möchte nicht, dass sie sich Gedanken über die Installation der LEMON-Bibliothek oder von OpenGL machen. Sie sollten nichts wissentlich zusammenstellen müssen. Ist das möglich?
Ich habe das Gefühl, dass es so ist, aber ich komme zu kurz, wenn ich nach Referenzen suche. Ich habe eine vage Vorstellung davon, dass ich, wenn ich eine Binärdatei unter Windows kompiliere, diese Binärdatei an jeden verteilen kann, der ein Windows-Betriebssystem ausführt. Aber was ist mit den Bibliotheken, die ich benutze? Ich schätze, ich muss sie unter Windows statisch verknüpfen, und das wird das dortige Abhängigkeitsproblem beheben. Aber im Hinterkopf habe ich gelesen, dass statisches Verknüpfen keine gute Praxis ist (oder ist dies nur unter Linux?)
Wie Sie sehen, bin ich etwas verloren. Ich würde mich über einen Anstoß in die richtige Richtung und einige Hinweise freuen, die Sie lesen sollten, wenn Sie etwas wissen!
Antworten:
Solange die Lizenz der VTK-Bibliotheken dies zulässt, können Sie möglicherweise ein NSIS-Installationsskript schreiben (das ein weiterverteilbares Installationsprogramm erstellt), mit dem die VTK-Bibliotheken im stillen Modus installiert werden. Im Ruhemodus (wenn das VTK-Installationsprogramm dies hat) werden die Bibliotheken installiert, ohne dass der Benutzer zur Eingabe aufgefordert wird. So funktionieren die meisten Installationsprogramme für Videospiele (die erforderliche Software wird installiert, ohne dass Sie aufgefordert werden, den Nutzungsbedingungen zuzustimmen oder zu installieren es).
Wenn Sie jedoch nur blind zusätzliche Software installieren, befinden Sie sich möglicherweise in einer prekären Rechtslage. Ich bin mir nicht ganz sicher, ob dies legal ist, aber ich würde vermuten, dass Sie den Benutzer über die gesamte zusätzliche Software informieren müssen, die Sie auf seinem Computer installieren möchten.
In einem der von mir geskripteten Installationsprogramme (für ein Produkt, an dem ich arbeite) muss beispielsweise SQL Server 2005 neben der Binärdatei installiert sein. Wenn auf dem Computer des Benutzers auf dem Computer des Benutzers nicht die erforderliche Version von SQL Server (oder höher) installiert ist, wird die MSI-Datei für SQL Server 2005 (im NSIS-Installationsprogramm enthalten) mit dem Schalter / q aufgerufen. Dadurch wird der SQL Server mit den Standardeinstellungen installiert, und der Benutzer sieht lediglich die Eingabeaufforderung "Installieren von SQL Server 2005", die ausgelöst wird, während das MSI seine Arbeit erledigt. Wir legen großen Wert darauf, den Benutzer darüber zu informieren und ihm die Wahl zu geben, unsere Software ohne sie zu installieren.
Möglicherweise können Sie ein Make erstellen, das alle Ihre Bibliotheken für Sie erstellt, und dann den NSIS Script Builder aufrufen, aber ich bin mir nicht sicher. Ich habe nicht so weit im Kaninchenbau nach NSIS gesucht, da wir Installer-Builds nicht automatisieren.
Natürlich können Sie NSIS durch jede andere Installationsskriptumgebung ersetzen. Ich habe es hier nur als Beispiel verwendet, weil ich ein wenig Erfahrung damit habe.
quelle