Sourcecode unter Windows und Linux compilieren



  • Hallo NG,

    ich habe C Sourcecode, der mit den GNU Tools übersetzt wird (autotool, gcc, ...). Nun muß dieser Sourcecode auch unter Windows übersetzt werden. Wenn es machbar ist, soll dabei die configure.in, die Makefile.am und der C Sourcecode in Visual Studio genutzt werden. Das heißt, Visual Studio ruft (wenn nötig) autolocal, (wenn nötig) autoheader, (wenn nötig) libtoolize, (wenn nötig mit --add-missing) automake, configure und make auf. Ansonsten soll der Windows Compiler aufgerufen werden, aber darum kümmern sich dann die Autotools.

    Ich hab beim Googlen MinGW gefunden, aber keine Anleitung, wie ich Visual Studio dazu bringe die Autotools korrekt aufzurufen. Der Hintergrund ist der, daß für ein Linux Backend in Form von dynamischen Libraries, die erstmal unter Windows zu DLLs kompiliert werden müssen (configure.in und Makefile.am existieren bereits), ein Windows Frontend entstehen soll um unsere Software auch Windows Usern zugänglich zu machen.

    Danke schonmal für jede Hilfe.
    BlackPepper

    Kleiner Nachtrag. Ich meine _NICHT_ Crosscompiling. Es soll also eine native Windows Anwendung entstehen.



  • VC bekommst du nicht dazu, die Autotools zu verwenden. No way.
    Einfachste Lösung: MSYS von MINGW + MINGW selbst runterladen und mit den autotools bauen.
    Komplexe Lösung: cmake oder scons verwenden bzw das Projekt dort einpflegen und die Projektdateien bzw Makefiles automatisch generieren lassen.
    edit: MSYS ist eine Bash für Win32, mit der eben solche Scripts funktionieren.
    HTH
    rya.



  • Hallo Scorcher24,

    daß heißt dann, das ich nach der Installation von MinGW und MSYS das Backend compilieren und installieren kann. Dann nehme ich mir Visual Studio und baue meine GUI Anwendung, die die DLLs benutzt.

    Benutzten die autotools den MS Compiler oder den GNU gcc? Mir wäre auf Windows der MS Compiler lieber.

    Gruß,
    Black Pepper



  • Mit MINGW erstellte Import-Libraries oder Static-Libs kannst du nicht mit VC verwenden. Die vertragen sich nicht, schon weil das Namemangling anders durchgeführt wird.
    Du kannst aber CodeLite oder Code::Blocks verwenden, wenn du die Variante mit MINGW magst. Das sind IDE für diesen Compiler.
    Oder was auch gut wäre, ist der QTCreator für Windows, der verwendet auch MINGW und QT ist ja nun LGPL.
    Edit:
    Die AUtotools mit MSYS verwenden nur den MINGW. Für VC gibts die nicht in der Form.

    Ansonsten bleibt dir nur der Weg über cmake / scons, wenns unbedingt MSVC sein soll.
    rya.



  • Hallo Scorcher24,

    noch bin ich da unvoreingenommen. Von daher ist es mir egal ob MinGW oder nicht. Der Sourcecode baut aber bereits auf die autotools aufbaut, benutzt also z.B. HAVE_XYZ oder mit --enable-feature wird Code ein- und ausgeschaltet. Diese Optionen will ich ja auch unter Windows nutzten können, wehalb zu MinGW eigentlich keine Alternative existiert.

    Die Linux Shared Libraries sollen nun unter Windows zu DLLs kompiliert werden, damit sie von einer Windows Anwendung benutzt werden können.

    Code::Lite und Code::Blocks sind IDEs für den GNU Compiler (MinGW)? Können die eine Windows Anwendung ähnlich wie Visual Studio bauen?

    Gruß,
    Black Pepper



  • Code::Lite und Code::Blocks sind IDEs für den GNU Compiler (MinGW)?

    Ja.
    Beide können auch mit vielen Compilern umgehen, aber wir brauchen ja den GCC wegen den Autotools, welcher aber 100% unterstützt wird.

    Beide können GUI-mäßig mit wxWidgets umgehen, Code::Blocks hat einen internen Designer (der aber nicht so doll ist imho), ich verwende wxFormbuilder extern und generiere damit den Code für die UI bzw die wxRC.
    Und wie gesagt, wenn du QT kannst, ist QTCreator auf jeden Fall zu empfehlen.
    Für reine WINAPI oder .net haben die keinen Designer. Aber warum soll man sich das Leben mit WINAPI schwer machen, mit QT oder wx gehts auf jeden Fall fixer.
    rya.



  • Hallo Scorcher24,

    das sind ja erst mal keine guten Nachrichten für mich. Vorhin hast Du geschrieben, daß ich mit MinGW erstellte Libraries nicht in Visual Studio verwenden kann. Und die MFC-Anwendung, die die DLLs ansprechen soll existiert ja bereits. Die soll nicht nach QT portiert werden. Die Anwendung wird also mit Visual Studio weiter bearbeitet werden.

    Vielleicht muß ich ja weiter vorne anfangen. Wie nutzte ich den Sourcecode plattformübergreifend? Vorallem wenn der Sourcecode auf die autotools angewiesen ist.

    Gruß BlackPepper



  • Da wirds sehr schwer. Autotools gibts nur für gcc und Konsorten afaik. Das beste wäre, das ganze Projekt soweit umzustellen auf diese X-Platform-Problematik. Du kannst afaik mit cmake auch Schalter definieren, ähnlich den autotools. NUr cmake generiert dann eben die nötigen Dateien und dann auch das VC++-Projekt.
    Aber wie das genau läuft musst aus der Doku entnehmen, ich vermeide solche Konstrukte wie Schalter in build-tools und nutze cmake nur als projekt-generator.

    LAngfristig würde ich überlegen, ob eine Portierung nach wxWidgets oder QT fürs Frontend nicht in Frage kommt, weil dann schreibst du den Code in Zukunft nur noch 1x^^ und nicht für jedes OS einzeln. :).
    rya.



  • All die Build-Schritte kannst du ja in ein Skript/Programm schreiben und dann dieses Programm als Compiler in VS einbinden. Schau dir zum Beispiel mal ein Guide an wie man QT in VS integriert in der nicht-kommerziellen Version (d.h. die Express-Variante).
    Oder schreibe ein Makefile das deine Build-Prozedur erledigt und erstelle ein Makefile-Projekt in VS.


Log in to reply