Antwort schreiben  Thema schreiben 
Verfasser Nachricht
ardi
Halbprofi
***


Beiträge: 114
Gruppe: User
Registriert seit: Feb 2011

Status: Abwesend
Danke erhalten: 244
Beitrag: #1
xPSP  [TUT] C/C++,make und depfiles nutzen (auch unter Windows)

Hallo,

hier geht's nicht um LUA Big Grin sondern um C, C++, make und Makefiles
(wer weiß, was depfiles sind, was sich machen usw. aber wissen will, wie er sie auch unter Windows nutzen kann, kann zum Abschnitt "Der Trick" runterscrollen.

zuerst einmal das Problem:

Nehmen wir an, wir haben eine main.c und eine extra.c und beide includieren (main.h mit #include "main.h").

Jetzt compilieren wir unser Programm. Und alles ist gut.

Jetzt kommen wir auf die Idee, und ändern main.c und main.h.
Jetzt compilieren wir unser Programm. Und nichts ist gut. Die in make und im Makefile eingebauten Regeln (Rules) erkennen, das die main.o älter als die main.c ist und compiliert die main.c erneut.
Aber was ist mit extras.c ??? Die enthält ja immer noch die veraltete main.h.

Die Lösung:

Es müssen also Extra-Rules her, die die Abhängigkeiten definieren. Das würde dann im Makefile so aussehen:

Code:
main.o : main.c main.h
extra.o : extra.c main.h


Jetzt weiß make, dass main.o (links vom Doppelpunkt) von main.c und main.h (rechts vom Doppelpunkt) und extra.o von extra.c und main.h abhängig ist.

Wird nun die main.h geändert, werden beim compilieren jetzt sowohl die mein.c als auch die extra.c neu compiliert.

Aber was ist, wenn main.h selbst eine Datei includiert z.B. test.h?

Auch diese Dateien können den Rules einfach hinzugefügt werden.

Code:
main.o : main.c main.h test.h
extra.o : extra.c main.h test.h


Warum kompliziert wenn es auch einfacher geht?

Je größer das Programm wird und je mehr C-Files und H-Files hinzukommen verliert man schnell den Überblick, welche Dateien von welchen abhängig sind. Zum Glück haben das auch die GCC Entwickler erkannt und haben die Möglichkeit geschaffen, dies Abhängigkeiten automatisch zu erkennen und in entsprechende Dateien (depfiles) zu exportieren.
Diese depfiles sind so aufgebaut, dass sie direkt vom Makefile includiert werden können. Ist das nicht fein?

Das böse Windows/DOS

Windows/DOS user haben aber ein Problem. Die Abhängigkeiten werden in den depfiles häufig mit vollem Pfad geschrieben. In Windows/DOS sieht das dann so aus:

Code:
main.o: main.c c:\pspsdk\psp\sdk\include\pspkernel.h ...

Das Problem hier ist das "c:\...". Da Rules die Zieldatei und die davon Abhängen Dateien mit einem Doppelpunkt verbindet, stört der Doppelpunkt, zwischen Laufwerk und Pfad.
Fazit: Windows user müssen auf depfiles verzichten. Bisher ...!

Der Trick

Mit einem Trick hab ich es nun geschafft auch unter Windows depfiles zu nutzen. Unten findet ihr einen Downloadlink. Darin sind zwei Dateien. Diese kopiert ihr nach [pspsdk]\psp\sdk\lib (dort sollten sich auch die Dateien build.mak und build_prx.mak befinden.

Öffnet dann euer Makefile. Dort findet ihr dies:

Code:
include $(PSPSDK)/lib/build.mak
oder
include $(PSPSDK)/lib/build_prx.mak

und ändert das in:

Code:
include $(PSPSDK)/lib/build_with_deps.mak
oder
include $(PSPSDK)/lib/build_prx_with_deps.mak

... Fertig

Achtung: Die depfiles werden erst erzeugt, wenn die c-files compiliert werden. Also macht erst einmal ein make clean und dann ein make. Erst dann sind die depfiles aktiv.

Download Download

ardi

Dieser Beitrag wurde zuletzt bearbeitet: 06.07.2011 23:45 von ardi.

06.07.2011 23:43
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Folgende User bedanken sich:
3m!n (Jul-21-2011), freak300 (Jul-7-2011)
3m!n
Legende
*****


Beiträge: 1.652
Gruppe: User
Registriert seit: Aug 2010

Status: Offline
Danke erhalten: 951
Beitrag: #2
RE: [TUT] C/C++,make und depfiles nutzen (auch unter Windows)

Hallo,

Super Tutorial !
Bin beeindruckt Big Grin

~Em!nk123

21.07.2011 15:39
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Antwort schreiben  Thema schreiben 

Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
xPSP [TUT] PSPSDK unter Ubuntu installieren + Hello World kompilieren -blue7 82 36.317 02.08.2011 20:18
Letzter Beitrag: Neutrosider
xPSP [TUT] PSPToolchain für Windows-User (ohne CYGWIN) Raiden1996 11 8.177 17.06.2010 21:33
Letzter Beitrag: PSP3k

Druckversion anzeigen
Thema einem Freund senden
Thema abonnieren | Thema zu den Favoriten hinzufügen




» zum Seitenanfang