Makefile

#615662
Lesenswert?

Hallo,

mir ist klar, dass *.h Dateien keinen extra Buildbefehl im makefile 
brauchen, da sie ja per include eingebunden sind, und daher 
mitcompiliert werden, wenn die c-datei übersetzt wird.

Aber wie bemerkt make änderungen an h dateien, wenn diese nirgends 
auftauchen? Oder passiert das garnicht und man muss erst ein clean 
machen bevor die änderungen erfasst werden?
Gast #616022
Lesenswert?

Indem man gcc einmal mit allen Quelldateien und -MM als 
Kommandozeilenparameter ausführt. Das erzeugt ein Makefile mit allen 
Abhängigkeiten. Das kann man im normalen Makefile dann includen.
Gast #616076
Lesenswert?

von Hand hier ein Beispiel:


fat.o: fat.c fat.h mmc.h makefile lanimacros.h
  msp430-gcc  ${PARAMETER} fat.o fat.c


fat.o wird neu übersetzt wenn sich fat.c, fat.h, mmc.h, makefile oder 
lanimacros.h geändert haben
#616121
Lesenswert?

Es gibt einen Weg, die Abhängigkeiten automatisch zu erzeugen, schau Dir 
dazu mal die makefiles in der WINAVR-Distribution an.

Dabei werden vom gcc-Compiler .d Dateien erzeugt (steht für .depency). 
Bei WINAVR-Beispiel-makefiles landen diese im .dep Verzeicnis. Das 
passiert mit diesen Zeilen:
1
# Compiler flags to generate dependency files.
2
GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d

Diese werden bei späteren makefile Aufrufen durch diese Zeilen 
mitberücksichtigt:
1
# Include the dependency files.
2
-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)

Durch diese Technik musst Du nur die .c Files angeben, Änderungen bei 
den includes werden automatisch mitgeführt.

Gruß, Stefan
Gast #616957
Lesenswert?

Ich habe auch eine Frage zum Makefile :).

Ich benutze Mfile um mir meine Makefiles zu erstellen und diese nutze 
ich dann im AVRStudio. Wenn ich nun mehrere .c Dateien habe, muss ich 
immer in der main.c alle Dateien mittels include <foo.c> einbinden, da 
bei mir das nicht funktioniert, wenn ich die .c Dateien nur im makefile 
mit angebe. Andersrum geht es jedoch. Wenn ich im makefile nichts angebe 
und nur in der main.c alle nötigen Dateien include, dann geht das auch.

Und noch eine Frage :

Ich habe es noch nie geschafft, ein Projekt mit der "Hauptdatei" main.c 
zu erstellen. Bei mir heißt die Hauptdatei immer so wie ich auch das 
Projekt genannt habe, da ansonsten der Compiler immer meckert, dass er 
keine .hex mit dem Projektnamen erstellen kann. Ist zwar nicht schlimm 
aber andere haben in ihren Projekten immer eine main.c, wie machen die 
das?

Gruß,

Marian

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren