2016-05-11 12 views
10

Ich versuche, ein Open Source C++ - Projekt zu erstellen. Ich möchte, dass es so einfach wie möglich zu bauen, aber gleichzeitig plattformübergreifend ist. Ich brauche keine gui oder schwere Bibliotheken wie Boost oder Qt, also habe ich mich für GitHub, CMake und LibSourcey entschieden. Mein Problem ist, ich kann keinen Weg finden, mein Projekt einfach in Windows zu erstellen, das ist meine Entwicklungsumgebung. Wie kann ich eine Bibliothek in Windows "installieren", um sie in meinem Projekt zu verwenden? Muss ich es sogar in Windows installieren? Ist es möglich, es automatisch herunterzuladen, zu erstellen und zu verknüpfen?CMake "make install" oder einschließlich einer Bibliothek in Windows

Unter Windows möchte ich neben einem Installer auch eine portable Version erstellen, also keine fest codierten Bibliothekspfade.

Ich nehme an, auf einigen Plattformen, wie Linux, Bibliotheken sind separat gebaut und verpackt von Betreuern. Also sollte ich nicht nur meine eigenen Kopien zusammenpacken.

Also meine Frage ist: Wie kann ich ein Projekt einrichten, das plattformübergreifend und einfach zu erstellen ist, und was sind die besten Praktiken?

+0

Ich bin mir nicht sicher, ob Sie über eine Lösung für Ihren Entwicklungsprozess oder für die Herstellung von Releases oder beidem sprechen. [msys2] (https://sourceforge.net/projects/msys2/) kann unter Windows verwendet werden, um Ihre benötigten Pakete zu verwalten. –

+0

Ich habe das gleiche Problem in letzter Zeit, msys2 gut aussehen, aber ich bevorzuge native Toolchain für Windows-Entwicklung. –

+0

Ich habe in msys gesucht, aber ich möchte, dass es nativ ist. Mit msys ist es noch schwieriger, für x64 und mit der richtigen Unicode-Unterstützung zu kompilieren. – denisps

Antwort

1

Sie können mit Pfad zum Beispiel contrib/LibSourcery und URL auf GitHub Repo von LibSourcery, git submodule in Ihrem git Repo erstellen wegen LibSourcery verwendet cmake Sie nur solche Zeile in Ihre CMakeLists.txt hinzufügen müssen: add_subdirectory(contrib/LibSourcery)

, die also Person Möchten Sie Ihren Code verwenden, nur tun git clone --recursive url , um alle Ihre Code und Abhängigkeiten zu erhalten, danach cmake -G laufen, um Projekt für IDE seiner Wahl zu erstellen (einschließlich MSVC++ natürlich), Projekt inöffnenund drücken Sie Build-Taste, das ist alles.

+0

Es scheint nicht zu funktionieren. Ich weiß nicht, ob ich etwas falsch mache oder LibSourcery unterstützt diese Art von Inklusion nicht. Ich habe es in Contrib-Ordner als Submodul eingefügt, aber ich bin immer noch nicht sicher, ob das der richtige Weg ist, eine Bibliothek auf Unix-Plattformen aufzunehmen. Wäre es mit der installierten Bibliothek verlinkt, wenn sie verfügbar ist? Wie fügt es hinzu? – denisps

+0

@denisps cmake unterstützt auch externe Projekte auf diese Weise https://cmake.org/cmake/help/v3.0/module/ExternalProject.html – fghj

+0

Diese Antwort scheint am nächsten zu sein. Leider scheint LibSourcery gebrochen zu sein und möglicherweise aufgegeben zu werden. Ich würde mich freuen, wenn Sie näher darauf eingehen, wie Sie den Fall berücksichtigen, wenn ich mit der Bibliothek verlinke, die z. B. auf Linux bereits installiert ist. – denisps

1

Verwenden Sie babun. Es ist ein Wrapper für Cygwin und es funktioniert perfekt für alles, was ich brauche, sogar mit CMake kompilieren.

Alternativ könnten Sie premake verwenden, die Lua als ein Konfigurationssystem verwendet und funktioniert gut auf Windows.

0

Es gibt keine elegante plattformübergreifende Möglichkeit, da die Idee von "make install" unter Windows nicht existiert, daher ist die Verwendung von cmake install dort undefiniert. Für etwas, das plattformübergreifend helfen soll, halte ich das für ein Manko cmake.

Meine Lösung ist, eine benutzerdefinierte _INSTALL zu schreiben, die die gleichen Argumente wie cmake install und dann unter Linux ruft nur install, und unter Windows eine add_command, die eine post-build-Kopie zu den Installationspfaden, die durchführt das gleiche. Im Grunde verhält sich _INSTALL so, wie Sie einen plattformübergreifenden Installationsbefehl erwarten. Kann meine _INSTALL-Funktion teilen, wenn Interesse besteht.

_INSTALL befindet sich in einem Helfer.cmake und ist in allen meinen CMakeList.txt für meine Projekte enthalten, also muss ich nur aufrufen und die generierten lib/inc Dateien erscheinen sowohl für win als auch für linux.