Forum: Compiler & IDEs Makefile


von Torsten (Gast)


Lesenswert?

Hi,
Ich habe ein C- Prog. mit eigenen Header- Files. An welcher Stelle muß 
ich die im makefile einbinden?
Im C- File sind die mit #include "probe.h" eingebunden und befinden sich 
im selben Verzeichnis wie das C- File.
Habe ein Win98 System.

Danke

von Andreas (Gast)


Lesenswert?

Hallo,

die h-Dateien müssen nicht im Makefile eingetragen werden, nur die 
c-Dateien.

MfG
Andreas

von David E. (it-web)


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?

von Günter R. (galileo14)


Lesenswert?

David Epping wrote:
> Aber wie bemerkt make änderungen an h dateien, wenn diese nirgends
> auftauchen?

Gute Frage. Das würde mich auch interessieren.

von Rolf Magnus (Gast)


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.

von Lanius (Gast)


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

von David E. (it-web)


Lesenswert?

Genau so kenne ich das auch, dann muss man eben ständig das makefile an 
alle abhängigkeiten anpassen.

nur hat mich die ursprüngliche Antwort irritiert

> die h-Dateien müssen nicht im Makefile eingetragen werden, nur die
> c-Dateien.

von Stefan K. (_sk_)


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

von Marian (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.