Linux Makefiles

Daniel Toplak

Erfahrenes Mitglied
Ich weiß zwar das Linux make und seine Makefiles nicht unbedingt hier in dieses Forum gehört, aber ich denke daß makefiles doch meißt von C/C++ Programmierern genutzt werden.

Hier erst mal ne Beschreibung:
Ich bin gerade dabei ein Projekt von Windows auf Linux zu portieren, bzw. parallel zu entwickeln.
Angefangen hab ich unter Windows mit VC++ 6.0. Das Projekt (bzw. der Arbeitsbereich) besteht aus mehreren statischen Lib's die danach mit einer main.cpp zu einer .EXE zusammengelinkt werden. (unter Windows wie auch unter Linux).
So jetzt hab ich z.B. eine Ordnerstruktur die folgendermaßen aussieht:

Code:
source        
 |-- apps
   |--app1    darin liegt meine main.cpp 
 |-- libs
   |--lib1    darin liegen meine .cpp und .h zu der jeweiligen lib
   |--lib2
   |--lib3
   |--...
   |--libn
Jetzt ist es so, daß ja VC++ 6.0 in jedem ordner beim kompilieren einen Release oder Debug Ordner anlegt (je nach Konfigruation).

Genau den selben Effekt will ich unter Linux erziehlen in dem ich für jede lib ein makefile erstellt habe und für die Applikation auch das ich dann aufrufe. Außerdem gibt es noch ein Globales makefile das von allen includiert wird. Es enthält allgemeine Regeln. Die makefiles der libs werden in einer Schleife aus dem "Hauptmakefile" der Applikation aufgerufen.

Su komm ich nun zu dem eigentlichen Problem:
jedes mal wenn ich z.B. "make debug" aufrufe, dann wird immer alles neu erstellt. Also alle .o und .a, obwohl keine Datei sich geändert hat
Die Ordner Debug in denen die Ausgaben (.o und .a) erfolgen lass ich von meinem globalen makefile das von allen includiert wird anlegen.
Und zwar gibt es dort eine Regel:

Code:
# jede .o braucht die entspr. .cpp, mache einen ordner und 
# compilier die .cpp zur .o
%.o: %.cpp
	-mkdir -p $(BUILDDIR)
	$(CC) $(CFLAGS) $(LIBINCLUDE) $(SDLINCLUDE) $< -o $(WORKINGDIR)/$(BUILDDIR)/$(@F)

So ich hoffe, daß irgendjemand nur annähernd verstanden hat, was mein Problem ist.

Gruss Homer
 
Original geschrieben von homer

So ich hoffe, daß irgendjemand nur annähernd verstanden hat, was mein Problem ist.

Ich hoffe auch das ich das richtig verstanden habe :)

Ich muss ehrlich zugestehen das ich mich noch nicht so eingehend mit Make auseinander gesetzt habe (bevorzuge Ant).

Aber versuch dein Projekt in KDevelop einzubinden, dieses erstellt dir die Make Files auch
 
Genau das wollte ich eigenltich nicht, da ich für zukünftigere Projekte automatische Makefiles aus Visual Studio .dsp's und .dsw's erstellen möchte.
Außerdem möchte ich doch ganz gern wissen, wie das so alles mit den Makefiles geht, bevor ich diese von KDevelop erstellen lass.
Aber Danke trotzdem.

Gruss Homer
 

Neue Beiträge

Zurück