Makefile-basiertes Projekt mit MPI und Git Anbindung in Xcode 8 anlegen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Makefile-basiertes Projekt mit MPI und Git Anbindung in Xcode 8 anlegen

    Hallo Leute,

    ich habe eine etwas komplexere Frage, die eigentlich aus mehreren Teilfragen besteht. Konkret geht es darum ein Xcode Projekt anzulegen, mit dem ich im Rahmen meines Studiums mit ein paar Informatikern (ich selbst bin keiner) zusammen, die alle unter Linux arbeiten an einem Projekt mitwirken kann, welches via Git Hub verwaltet wird. Ich hatte auch schon im MacUser Forum dazu etwas gepostet, könnte mir aber vorstellen, hier noch ein paar mehr Experten zu finden.

    Folgendes soll realisiert werden:

    Ein MPI-basiertes Programm soll entwickelt werden. Als Vorgabe für die verwendete MPI-Version gab es mpich. Diese steht fest, wurde auch schon via Macports installiert und kompiliert mir simple kleine Beispielsprogramme schon einwandfrei über die Kommandozeile.
    Entwickelt werden soll ein reines C++ basiertes Command Line Tool. Ein Repository mit Makefile liegt für das Projekt bereits im Git Hub und ich will mich da dran hängen. Ich würde nun also gerne ein Xcode Projekt anlegen, welches sich mit dem Repository verknüpft, so dass ich via Pull und Push mich synchronisieren kann. Dabei soll das Makefile dort von Xcode genutzt werden und beim Build halt mpicc genutzt werden. Für das anschließende Ausführen sollte das Ergebnis mit mpirun gestartet werden.

    Als Anfänger ohne jegliche Git-Erfahrung und ohne große Ahnung wie man Xcode dazu bringt sich an ein Makefile zu halten und außerdem mpicc zu nutzen habe ich lediglich die starke Vermutung, dass das ganze theoretisch doch gehen müsste, aber nicht mehr. Mir ist übrigens klar, dass Xcode dazu sich selbst sicher noch eine Projektdatei anlegen wird, die aber die anderen beiden Entwickler, die auf ihrem Lieblings-Linux mit ihrer Lieblings-IDE arbeiten ja nicht weiter stören sollte.

    Könntet ihr mir da ein wenig auf die Sprünge helfen? Ich erwarte keine vollständige Schritt für Schritt Anleitung, aber wäre froh wenn ich zumindest etwas mehr über die überhaupt notwendigen Schritte beim anlegen eines solchen Projektes erfahren könnte. Vieles was ich beim googeln zu den Schlagworten gefunden habe bezog sich dann auch auf sehr alte Xcode Versionen, die von den Menüaufbauten völlig anders aussahen, als mein aktuelles Xcode.

    Vielen Dank schon mal!
  • uC_J schrieb:

    Vieles was ich beim googeln zu den Schlagworten gefunden habe bezog sich dann auch auf sehr alte Xcode Versionen, die von den Menüaufbauten völlig anders aussahen, als mein aktuelles Xcode.
    Für Makefiles und neuere Xcode Versionen findest Du sicherlich was im Netz! Habe ich nicht oft gemacht, aber die wenigen Male habe ich ein "external Build System" angelegt... Mehr sagt Google, Bing und co.

    Bei git musst Du dir halt überlegen, ob Du dein Xcode-Projekt einchecken möchtest oder nicht. Den Git-Clienten in Xcode verwende ich nicht, da ich auch nicht immer mit Xcode arbeite. ScoureTree ist echt gut, aber das Terminal tuts auch leicht. Sind ja nur eine handvoll Befehle die man braucht. Ausserdem gibt's da ein ein oh-my-zsh Plugin, dass git unterstützt. Ich verwende also nicht die Bash sondern Zsh.

    Statt ein Makefile zu schreiben verwendet man auch gerne CMake. Damit kann man sich dann Makefile, Xcode Projekt und noch ein paar mehr generieren lassen.

    Statt Macports nutze ich Homebrew. Aber das ist eher Geschmacksache. Man sollte nicht beide gleichzeitig einsetzten...

    Eigentlich kannst Du auch ein stink normales C++ Konsolenprojekt anlegen. Nimm das Makefile als Vorlage und stell dein Projekt entsprechend ein. So dick wird euer Makefile wohl nicht sein. Man hat dann zwar nicht 100 % das gleiche, aber Du kann auch immer wieder mal das Makefile im Terminal aufrufen, um zu schauen ob das noch funktioniert...
  • Ich empfehle Dir alles ins git-repo zu packen, was zum bauen des Projektes nötig ist. Also auch die Xcode-Projektdatei und alle verwendeten Libraries. Nichts ist nerviger, als nach einiger Zeit, wenn Du nicht mehr tagesaktuell in einem Projekt drin bist, mit rumfrickeln anzufangen nur um das Projekt zu starten. Der build-Prozess sollte so einfach und automatisiert wie irgend möglich sein. Auschecken, einen (!) Knopf drücken bzw. einen Befehl aufrufen (run-me-to-build-all-the-shit.sh, auch mit im Repo) und der Rest läuft selbstständig durch. Für sowas sind Conputer da...
  • Keine Ahnung wie man das richtig macht, aber so ungefähr könnte das gehen:
    1. Erstelle ein "external Build System" Project (mit Git-Unterstützung)
    Im Terminal oder mittels SourceTree
    2. Add to git a new remote (origin von GitHub)
    3. Jetzt muss man von origin ein pull machen, also die vorhanden Quellen runterladen (und Mergen oder so)
    In Xcode
    4. füge die vorhanden Quellen hinzu, da Xcode nicht das Makefile analysiert
    5. Wenn das Makefile im selben Ordner wie das Projekt ist, sollte das Bauen jetzt per Knopfdruck funktionieren. Ansonsten das Target anpassen.
    6. Vermutlich werden die Header-Dateien jetzt nicht gefunden, da muss man in Xcode sicherlich noch einen Pfad setzen
    7... Wenn neue Quellen hinzukommen, dann musst das immer von Hand machen, da Xcode das Makefile nicht analysiert

    Wie gesagt, als Alternative CMake oder nutze einfach VSCode. Da kannst Du einfach den Ordner öffnen und siehst alle Dateien, die im Ordner drinnen sind. Mit Erweiterungen sollte auch Intellisens funktionieren, sowie Bauen und Debuggen. Git kann man von VSCode auch nutzen.
  • Beim Spazierengehen ist mir noch etwas eingefallen, wie es geht, da gerade ausprobiert:
    1. Öffne Xcode und erstelle ein "External Build System" Projekt (ohne git)
    2. Schließe Xcode
    3. Schiebe die Projektdatei *.xcodeproj aus dem Ordner
    4. Lösche alle Dateien im Ordner (im Terminal rm -rf .)
    5. clone dein Projekt in den Ordner rein (git clone Adresse .)
    6. Schiebe die Porjektdatei zurück in den Ordner

    Jetzt solltest Du einfach per Knopfdruck bauen können (ich gehe davon aus, dass das Makefile im Wurzelverzeichnis des Projektes liegt). Sourcen musst Du per Hand hinzufügen (funkt. nicht auto.).

    Nach dem Bauen gitignore anpassen, denn DerivedData braucht man nicht einchecken. Checke das Projekt ein.
  • Oh, ich hatte gedacht ich hätte hier eine E-mail Benachrichtigung für neue Antworten eingestellt, scheinbar war das nicht so, deshalb seh ich erst jetzt dass hier zwischenzeitlich Antworten kamen.

    Erst mal hab ich dann die Option "External Build Project" auch gefunden, keine Ahnung warum ich sie übersehen hatte.

    Ich habe es jetzt erst mal nach manoh gemacht, funktionierte alles leider nur bis vorm builden. Das liegt jetzt aber daran, dass das Projekt openmp nutzt, das jedoch vom llvm der mit Xcode kommt offenbar nicht vollständig unterstützt wird. Bisher hab ich ihn noch nicht überzeugen können den inzwischen nachinstallierten "echten" gcc der es können sollte zu nutzen statt dem gcc wrapper für den llvm den Apple da ins System gepflanzt hat. Das genutzte Makefile ruft nämlich einfach g++ auf und ziel war es ja im besten Fall das gemeinsame Makefile auch nutzen zu können.

    Ich habe häufiger gelesen, dass der nachinstallierte gcc mit gcc-6 aufgerufen wird und davon abgeraten wird den Link vom clang/llvm auf den echten gcc zu setzen - was genau wäre dabei denn der negative Effekt?
  • So, die ganze Sache läuft jetzt endlich. Das Makefile wurde so modifiziert, dass ich ihm als Argumente "CC=gcc-6 CXX=g++-6" übergebe und im Makefile diese auch an das aufgerufene configure Skript der eingebundenen, openmp nutzenden library übergeben wird. Nun kompiliert es wunderbar durch und vor allem kann ich nach dem anlegen des Projekts nach dem Vorschlag von manoh nun auch direkt über das SourceControl Menü von Xcode committen. Scheint für mich wie eine optimale Lösung!

    Danke für die Hilfe