Forum: Mikrocontroller und Digitale Elektronik Headerdateien?!


von Jan H. (janiiix3)


Lesenswert?

Hallo,

mir ist aufgefallen das z.B Atmel Studio (evtl. auch andere Kompiler) 
die Headerdateien nicht jedes mal neu übersetzen / kompilieren.

Kann man das in den Headerdateien irgendwie verankern?
Der Kompiler soll jedes mal beim kompilieren, die Headers auch mit 
einbeziehen.

Danke im Voraus.

von Stefan F. (Gast)


Lesenswert?

Dafür sorgt das Programm "make" zusammen mit seiner Konfigurationsdatei 
"Makefile".

von Kilo K. (kilo81)


Lesenswert?

Ich denke mal du musst die Headerdateien speichern nachdem du Änderungen 
daran vorgenommen hast! Siehst du ja an dem "*" in den Registerkarten 
unten.
Danach kompiliert AVR Studio die aktuellen Dateien.
So klappt es jedenfalls bei mir.

von Falk B. (falk)


Lesenswert?

@Jan H. (janiiix3)

>mir ist aufgefallen das z.B Atmel Studio (evtl. auch andere Kompiler)
>die Headerdateien nicht jedes mal neu übersetzen / kompilieren.

Nö, die werden so oder so nur per #inlcude in einen Quelltext 
eingebunden.
Und ALLEIN werden sie so oder so nicht compiliert.

Was du vermutlich meinst ist die Fähigkeit der meisten Compiler/IDEs, 
die Abhängigkeiten einer Datei zu erkennen und dieser nur dann neu zu 
kompilieren, wenn sich eben diese Dateien geändert haben.

>Kann man das in den Headerdateien irgendwie verankern?

Nö, das macht der Compiler selber.

>Der Kompiler soll jedes mal beim kompilieren, die Headers auch mit
>einbeziehen.

Das macht der schon, keine Sorge.

von Jan H. (janiiix3)


Lesenswert?

Falk B. schrieb:
> @Jan H. (janiiix3)
>
>>mir ist aufgefallen das z.B Atmel Studio (evtl. auch andere Kompiler)
>>die Headerdateien nicht jedes mal neu übersetzen / kompilieren.
>
> Nö, die werden so oder so nur per #inlcude in einen Quelltext
> eingebunden.
> Und ALLEIN werden sie so oder so nicht compiliert.
>
> Was du vermutlich meinst ist die Fähigkeit der meisten Compiler/IDEs,
> die Abhängigkeiten einer Datei zu erkennen und dieser nur dann neu zu
> kompilieren, wenn sich eben diese Dateien geändert haben.
>
>>Kann man das in den Headerdateien irgendwie verankern?
>
> Nö, das macht der Compiler selber.
>
>>Der Kompiler soll jedes mal beim kompilieren, die Headers auch mit
>>einbeziehen.
>
> Das macht der schon, keine Sorge.

Habe mich gewundert. Habe mit den Macros "__TIME__" & "__DATE__" die 
Zeit und das Datum gespeichert und wundere mich heute, wieso da noch das 
alte Datum drin steht, habe das Projekt neu kompiliert.

Wollte eigentlich, wenn ich main() kompiliere, das dass aktuelle Datum 
drinn steht.

von Falk B. (falk)


Lesenswert?

@Jan H. (janiiix3)

>Wollte eigentlich, wenn ich main() kompiliere, das dass aktuelle Datum
>drinn steht.

Vermutlich mußt du dazu deinen Compiler neu starten und nicht wie bisher 
tagelang geöffnet lassen.

von Jan H. (janiiix3)


Lesenswert?

Falk B. schrieb:
> @Jan H. (janiiix3)
>
>>Wollte eigentlich, wenn ich main() kompiliere, das dass aktuelle Datum
>>drinn steht.
>
> Vermutlich mußt du dazu deinen Compiler neu starten und nicht wie bisher
> tagelang geöffnet lassen.

Sehr lustig Herr B.

von Einer K. (Gast)


Lesenswert?

Dann solltest du ein "make clean" machen...
Also die betreffende *.o Datei entsorgen.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Jan H. schrieb:
> Habe mit den Macros "__TIME__" & "__DATE__" die Zeit und das Datum
> gespeichert

Wo?

Deine *.c-Datei wird nicht neu übersetzt, nur weil sich das Datum 
ändert. Solange sie aber nicht neu übersetzt wird, stehen natürlich in 
der erzeugten Objektdatei die Werte für _TIME__ und __DATE_ drin, die 
zum Zeitpunkt des letzten Übersetzens drinstanten.

Diese beiden "Macros" kommen übrigens nicht aus einer Headerdatei, 
sondern sind eine eingebaute Funktion des Compilers.

von Falk B. (falk)


Lesenswert?

Ein einfaches clean + build all würde das Problem auch lösen ;-)

von Rudolfo (Gast)


Lesenswert?

Falk B. schrieb:
> Ein einfaches clean + build all würde das Problem auch lösen ;-)

Korrekt ;)

Ich war als Anfänger auch verwirrt. Vor allem, weil nur nach dem 
abspeichern die Meckermeldung

>#warning F_CPU not defined!

kam. Bei erneutem kompilieren war das weg. Dadurch hatte ich 
herausgefunden, dass im Atmel-Studio nur neu kompiliert wird, wenn sich 
die Headerdatei auch geändert hat.

Daher braucht dich das nicht weiter interessieren. Der Compiler macht 
das schon. Einfach auf kompilieren drücken und gut ist. Du brauchst also 
kein "clean" zu verwenden, außer du willst das explizit :)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Rudolfo schrieb:
> Dadurch hatte ich herausgefunden, dass im Atmel-Studio nur neu
> kompiliert wird, wenn sich die Headerdatei auch geändert hat.

Das ist nicht nur im Atmel-Studio so, das ist generell so, wenn das 
Makefile vernünftig aufgebaut und die Headerdateien als Abhängigkeiten 
angegeben sind, dafür ist make schließlich da.

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.