Forum: Mikrocontroller und Digitale Elektronik Headerdateien?!


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Naj H. (janiiix3)


Bewertung
0 lesenswert
nicht 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. (stefanus)


Bewertung
0 lesenswert
nicht lesenswert
Dafür sorgt das Programm "make" zusammen mit seiner Konfigurationsdatei 
"Makefile".

von Dominik K. (kilo81)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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 Naj H. (janiiix3)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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 Naj H. (janiiix3)


Bewertung
0 lesenswert
nicht 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 Arduino Fanboy D. (ufuf)


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

von Rufus Τ. F. (rufus) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht 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)


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

von Rudolfo (Gast)


Bewertung
0 lesenswert
nicht 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) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.