[Gelöst] Makefile erklärung!!!


LecramOS

Member
Joined
Feb 20, 2010
Messages
121
Age
39
Location
Pandora.
LOCATION
Pandora.
Hallo baldige Pandorianer und die anderen ^_^

So langsam versteh ich auch mit anderen Bibliotheken in einen C programm umzugehen, jedoch nur auf Dev-C++.
Ich weiß also, wie ich andere Bibliotheken über Dev-C++ mit einbeziehe und kann diese dann gut compilieren und
für mein Programm nutzen. Klappt wunderbar solange es sich um Programmierung auf PC handelt und nicht für ein anderes system wie in meinen Fall jetzt die PlaystationPortable mit CFW.

Bitte jetzt nicht geschockt sein und denken:,, :slap: Wie kann er es wagen hier im gp2x Forum über die PSP zu sprechen oder ähnliches.

Dadurch, dass ich die PSP nun als Versuchsobjekt nehme um schon mal einen einblick in das programmieren für andere Systeme bekomme (für Pandora), bin ich auch schon auf einige Sachen gestoßen, die ich nicht ganz verstehe und das ist unter anderem das "Makefile" .

Es ist nicht so, dass ich nicht schon ein HelloWorld auf der PSP zum starten gebracht hätte.
Ich hatte wie beschrieben Cygwin + psptoolchain + pspsdk installiert und ich konnte EBOOT.pbt dateien compilieren.

So tastete ich mich dann mithilfe von Tutorials immer ein stückchen weiter in C programmieren für die PSP bis ich zu dem ende der Tutorials kam, wo ich zu guter letzt Sound eingefügt sollte und ein bewegbares Bild.

Nun ist bei diesen ganzen PSP programmieren aber ein für mich großer unterschied zum mehr oder weniger bequemen Dev-C++ ,womit ich ja für PC programmiere, weil ich bei der PSP zum compilieren ja Cygwin benutzen muss/soll und da auf einmal dieses "Makefile" ist, womit ich in der PC programmierung noch nie zutun hatte. :huh:

Da ich denke, dass es ganz bestimmt nicht das letzte mal sein wird(ausser ich sterbe) , dass ich mit diesen "Makefile" zu tun habe stelle ich Euch nun die Frage und gleichzeitig bitte ob mir das nicht jemand mal erklären kann was die einzelnen Syntax in dieser Datei eigentlich bedeuten und wie man es zusammensetzt ???

Bitte möglichst gut beschreiben.
Dankööö.
 
Re: Makefile erklärung!!!

<t>Hey,<br/>
<br/>
wenn du nah am Pandora System arbeiten möchtest dann setz dir doch ein Linux auf in einer VirtualBox oder natürlich besser noch direkt auf deiner Maschine.<br/>
<br/>
(Es heißt EBOOT.PBP, nicht PBT :> )<br/>
<br/>
Zur eigentlichen Frage:<br/>
Ein Makefile ist für das Programm "make" gedacht, welches die "Makefile" abarbeitet und dir das Programm mit Hilfe anderer Programme wie z.B. gcc kompiliert bzw. installiert.<br/>
<br/>
Ich glaube ich habe es so kompakt und verständlich erklärt.<br/>
<br/>
Frag einfach falls du es nicht ganz verstanden hast, bzw. noch fragen hast :)<br/>
<br/>
Liebe Grüße</t>
 
Re: Makefile erklärung!!!

<r><E>:O</E> ÄÄää ... Ja ... ... Kompakt war es. <br/>
Verständlich ... rein oberflächlich gesehen auch.<br/>
<br/>
Doch ich wollte mehr vom Detail <E>:yes:</E> <br/>
<br/>
EDIT: Habe hier eine gute erklärung. <URL url="http://www.asurowiki.de/pmwiki/pmwiki.php/Main/MakefileHowto"><LINK_TEXT text="http://www.asurowiki.de/pmwiki/pmwiki.p ... efileHowto">http://www.asurowiki.de/pmwiki/pmwiki.php/Main/MakefileHowto</LINK_TEXT></URL><br/>
<br/>
Was ist der unterschied wenn ich mit Linux(b.s.p ubuntu) compiliere oder auf Windows ???<br/>
Editor ist Editor oder ?<br/>
<br/>
Habe über eine virtuelle Maschine Ubuntu installiert und läuft auch, aber was soll mir das denn jetzt für Vorteile bieten ?<br/>
<br/>
-- So Feb 21, 2010 21:41 --<br/>
<br/>
<E>:dash:</E> Blödes Makefile. Muss das so kompliziert sein ? <E>:dash:</E><br/>
<br/>
-- So Feb 21, 2010 21:42 --<br/>
<br/>
<E>:dash:</E> Blödes Makefile. Muss das so kompliziert sein ? <E>:dash:</E></r>
 
Re: Makefile erklärung!!!

<r><QUOTE author="LecramOS"><s>
LecramOS said:
</s>
Doch ich wollte mehr vom Detail :yes:
<e>
</e></QUOTE>
Dann solltest du auch im Detail fragen.
<QUOTE author="LecramOS"><s>
LecramOS said:
</s>
Was ist der unterschied wenn ich mit Linux(b.s.p ubuntu) compiliere oder auf Windows ???
<e>
</e></QUOTE>
Direkt gibt es keinen Unterschied auf welcher Plattform du kompilierst, es geht viel mehr darum für Was du kompilierst, denn wie du selbst gemerkt hast kann man auch auf einem Windows System für das PSP System kompilieren.
<QUOTE author="LecramOS"><s>
LecramOS said:
</s>
Habe über eine virtuelle Maschine Ubuntu installiert und läuft auch, aber was soll mir das denn jetzt für Vorteile bieten ?
<e>
</e></QUOTE>
Was bei dir in der Virtuellen Maschine läuft, kann solange es gut programmiert wurde, auch auf dem Pandora laufen.<br/>
Schließlich läuft auf dem Pandora Angstrom Linux, welches ja auch ein Linux ist. Das heißt, mit Ubuntu in diesem Fall hast du die meisten Librarys bereits oder kannst diese leicht nachinstallieren.<br/>
<br/>
Falls du mehr zu Makefile wissen möchtest, lies <B><s></s><URL url="http://www.gnu.org/prep/standards/html_node/Makefile-Conventions.html#Makefile-Conventions"><s></s>hier<e></e></URL><e></e></B> nach.<br/>
<br/>
Falls du mehr Fragen zu dem Thema hast, kannst du natürlich auch mal im IRC-Channel vorbeischauen, dort geht das erklären auch schneller.<br/>
<br/>
Liebe Grüße</r>
 
Re: Makefile erklärung!!!

<r><QUOTE author="LecramOS"><s>
LecramOS said:
</s>Doch ich wollte mehr vom Detail <E>:yes:</E> <br/>
EDIT: Habe hier eine gute erklärung. <URL url="http://www.asurowiki.de/pmwiki/pmwiki.php/Main/MakefileHowto"><LINK_TEXT text="http://www.asurowiki.de/pmwiki/pmwiki.p ... efileHowto">http://www.asurowiki.de/pmwiki/pmwiki.php/Main/MakefileHowto</LINK_TEXT></URL>
<e>
</e></QUOTE>
Für GNU make ist hier das Original:<br/>
<URL url="http://www.gnu.org/software/make/make.html"><s></s>http://www.gnu.org/software/make/make.html<e></e></URL><br/>
dort findest Du ziemlich weit unten die makefile conventions:<br/>
<URL url="http://www.gnu.org/software/make/manual/make.html"><s></s>http://www.gnu.org/software/make/manual/make.html<e></e></URL>
<QUOTE author="LecramOS"><s>
LecramOS said:
</s>
Was ist der unterschied wenn ich mit Linux(b.s.p ubuntu) compiliere oder auf Windows ???<br/>
Editor ist Editor oder ?<e>
</e></QUOTE>
Aber compiler muss nicht unbedingt compiler sein - und das makefile ist für den compiler. Wirklich mal gaanz einfach gesagt eine Art Batchdatei oder Steuerdatei was der Compiler wann mit welchen Dateien machen soll. Interessant und notwendig wird es erst, wenn Du in grosse Projekte einsteigst, die aus sehr vielen Einzeldateien bestehen.
<QUOTE author="LecramOS"><s>
LecramOS said:
</s>Habe über eine virtuelle Maschine Ubuntu installiert und läuft auch, aber was soll mir das denn jetzt für Vorteile bieten ?<e>
</e></QUOTE>
Du könntest dort den gcc compiler mit vollen Docs, howtos und manuals installieren. Dann stünde Dir mit dem Befehl "apropos" eine Suchfunktion zu bestimmten Begriffen und den dazu verfügbaren Befehlen zur Verfügung.<br/>
<br/>
Ich würde Dir zu diesen Grundlagen-Fragen jedoch empfehlen ein Forum zu suchen welches sich explizit mit Programmierung beschäftigt. Ich könnte mir denken, daß vieles FAQ sein wird. Jedenfalls viel Spaß beim lesen. <E>;)</E><br/>
<br/>
Ups, zLoud war schneller. <E>;)</E></r>
 
Re: Makefile erklärung!!!

<t>Danke für die Hilfe und die einladung.</t>
 
Re: Makefile erklärung!!!

<r>Ich kann zwar kein C/C++ (hatte nach ersten Versuchen einfach kein Bock mehr, einmal eckige Klammer mit geschweifter vertauscht und schon lief nichts mehr und das dumme Programm wollte den Fehler auch nicht finden) aber ich würde einfach sagen dass bei Linux die Vorteile darin liegen dass man schon einige vielfältige Compiler gleich hat, GCC ist da ein gutes Beispiel, aber auch (unter anderem) Python ist im Vergleich zu Windows mit dabei. Bei Linux hast du also schon einiges an Compilern was man bei Windows nachinstallieren muss was auch mal schief gehen kann. Bei mir waren auch meine erste Schritte in Python mit Linux (Debian) viel leichter als mit Windows XP, auch weil bei Windows so gut wie gar nichts da war und alles nachinstalliert wurde.<br/>
Ob die PSP jetzt gute Vorbereitung auf Pandora ist bezweifle ich auch, ich habe einmal mit LUA extra wegen der PSP angefangen (war auch schon etwas weiter als mit C++), da die Pandora aber Angström als OS haben wird wäre das Verhalten eher wie bei einem Linux-PC (Angström hat ja auch GCC sodass man bei langer Weile sogar auf der Pandora selbst Programmieren könnte <E>:unsure:</E> )<br/>
EDIT: war wohl etwas zu langsam...</r>
 
Re: Makefile erklärung!!!

<r>OK ich finde mich mal damit ab, dass es für die Pandora "hoffentlich" leichter compilieren lässt als jetzt für die PSP und werde mich ab morgen auch wieder hauptsächlich auf PC programmierung konzentrieren und mir wirklich mal den Ratschlag zu herzen nehmen über die Virtuelle maschine auf Ubunt zu compilieren <E>:-D</E> . Aber müsste doch möglich sein, dass ich mithilfe des Makefiles die ALLEGRO bibliothek und das PSPSDK miteinander verbinde, also die einzelnen bibliotheksDaten die halt fürs compilieren notwendig sind meine ich. So müsste ich doch eigentlich mit ALLEGRO und dem PSPSDK zusammen für die PSP compilieren können oder ?? und mich nicht nur auf die vorgegebene PSPSDK beschränken oder ?? nur da wird es ja für mich kompliziert, weil ich das Makefile ja irgendwie anpassen muss. <E>:confused:??</E><br/>
<br/>
-- Mi Mär 17, 2010 10:13 --<br/>
<br/>
Hier hat Evil Azrael das "einfache" Makefile ganz gut erklärt, doch war es in einem anderen Thread.<br/>
Deshalb poste ich seine Erklärung noch mal hier, damit Leute die nach Makefile Erklärung suchen<br/>
auch hier eine Antwort finden.<br/>
<br/>
Zitat von Evil Azrael<br/>
<br/>
<br/>

<QUOTE><s>
</s>
Also.. zum einen haben Makefiles nix mit C++ zu tun. Mit Makefiles kann man alles machen, so kochen oder Wäsche.<br/>
Und einfache sind nicht schwer, sondern bestehen immer aus<br/>

<CODE><s>
Code:
</s>Ziel: Voraussetzungen
    Befehl1
    Befehl2
    usw
<e>
</e></CODE>
Die Befehle werden durch ein Tab eingerückt. Am ende der Befehlskette sollte das Ziel erstellt sein.<br/>
Beispielsweise<br/>

<CODE><s>
Code:
</s>funktion.o: funktion.h funktion.cpp global_vars.h
  g++ funktion.cpp -c -o funktion.o<e>
</e></CODE>

Die erste Zeile sagt, um funktion.o zu erstellen braucht man funktion.h funktion.cpp und global_vars.h. Diese müssen nicht erstellt werden, aber falls eine von denen neuer ist als die funktion.o, dann erstelle funktion.o bitte neu. Das -c sagt dem Compiler "führe den linker schritt nicht aus, sondern erstelle ein kompiliertes object-file.<br/>
<br/>
das gleiche machen wir nochmal für die main (beispielhaft)<br/>

<CODE><s>
Code:
</s>main.o: main.cpp funktion.h global_vars.h
   g++ main.cpp -c -o main.o
<e>
</e></CODE>
Und am Ende linken wir alles zusammen:<br/>

<CODE><s>
Code:
</s>test.exe: main.o funktion.o
    g++ main.o funktion.o -o test.exe<e>
</e></CODE>

<br/>
Und zusammen Makefile:<br/>

<CODE><s>
Code:
</s>funktion.o: funktion.h funktion.cpp global_vars.h
  g++ funktion.cpp -c -o funktion.o

main.o: main.cpp funktion.h global_vars.h
   g++ main.cpp -c -o main.o

test.exe: main.o funktion.o
    g++ main.o funktion.o -o test.exe
<e>
</e></CODE>

make test.exe<br/>
sollte dann die exe einschliesslich (geänderter) Voraussetzungen erstellen.<br/>
<br/>
Kompliziert, oder? Das Einfügen der global_var.cpp ist dem interessierten Schüler zur Übung überlassen.<br/>
<br/>
_________________<br/>
War, War never changes... The end of the world occurred pretty much as we had predicted. Too many humans, not enough space or resources to go around. The details are trivial and pointless, the reasons, as always, purely human ones. A great cleansing, an atomic spark struck by human hands, quickly raged out of control, spears of nuclear fire rained from the skies, continents were swallowed in flames and fell beneath the boiling oceans....<br/>
<br/>
<URL url="http://www.evilazrael.de">http://www.evilazrael.de</URL>
<e>
</e></QUOTE></r>
 
Back
Top