include Dateien

Gast #100480
Hallo

Hier mal wieder ne Anfängerfrage.
Ich schreibe gerade ein Programm unter WIN-AVR, für dieses benötige ich
die Datei lcd.h (Ich will mit nem Display rumspielen).
Jetzt hab ich festgestellt, dass ich die Dateien lcd.h und lcd.c in
meinem Verzeichnis haben muss, in dem auch mein derzeitiger Quellcode
liegt ansonsten kommt ein Fehler (No rule to make target `lcd.c').

Jetzt ist meine Frage, ob ich diese lcd-Bibliothek nicht irgendwie in
den Compiler einbinden kann, so dass ich nicht jedesmal diese Dateien
in meine Entwicklungsverzeichnisse kopieren muss wenn ich ein neues
Programm schreibe. Im avr/include-Verzeichnis hab ich sie schon - das
hat nicht geholfen. Oder liegts am Makefile?
Das geht doch sicher irgendwie - nur hab ich's vermutlich mal wieder
überlesen.

viele Grüße
Josch
Gast #100481
Nun, Du solltest Dir erstmal über die Begrifflichkeiten im Klaren
werden.

Eine Headerdatei deklariert ein Interface zu irgendwas.  Diese muß vom
Compiler beim Compilieren all derjenigen C-Quelldateien auffindbar
sein, die darin deklarierte Funktionalität benutzen wollen.

Deine Methode, sie ins Systemverzeichnis (für Headerdateien) zu
werfen, ist eher brutal.  Die normale Methode wäre es, dem Compiler
mit -I zu erzählen, wo er überall seine Headerdateien suchen soll.  Im
Makefile-Template ist der Makro CINCS dafür reserviert, daß man in ihm
alle -I Anweisungen für den Compiler aufführt.  (Wenn Du Dir einen
Gefallen tun willst, trennst Du die Pfadnamen nicht mit \ sondern mit
/, andernfalls müßtest Du alle \ als \\ notieren, weil die
Interpretation der make-erzeugten Kommandos von einer Unix-Shell
vorgenommen wird.  Windows versteht aber auch die Vorwärtsstriche
intern anstandslos.)

Eine Bibliothek im landläufigen Sinne ist eine Objektmodulbibliothek,
Endung .a (Mnemonik: archive).  Diese enthält vorcompilierte
Objektmoduln, die vom Linker bei Bedarf hinzugefügt werden können.
Man gibt dem Linker nur den Namen der Bibliothek mit an, und anhand
der Endung .a weiß er, daß er aus dem Archiv nur das nehmen soll, was
gebraucht wird.

Auf diese Weise ist die Standardbibliothek (libc.a) aufgebaut.
Angelegt werden sie mit dem Kommando avr-ar.

Der Nachteil ist, daß Du eine solche Bibliothek praktisch für jeden
AVR-Typ separat compilieren mußt, da in aller Regel die C-Programme
viele Hardwareabhängigkeiten aufweisen.

Alternativ kannst Du gleich Deine C-Quelldatei (ggf. mit vollem
Pfadnamen) dem Compiler mit angeben.  Dann wird sie für Dein konkretes
Projekt (und mit dessen -mmcu= Option) in eine Objektdatei compiliert
und mit hinzugelinkt.  Das dauert zwar theoretisch etwas länger als
das Extrahieren aus einer Bibliothek, aber der Unterschied ist bei
heutigen Compiler-/Computergeschwindigkeiten zu vernachlässigen.
Gast #100482
uff, an der Antwort hab ich jetzt erstmal ein wenig zu arbeiten.
Mein Programm läuft zwar so zur Hälfte ganz gut - aber ich merke
gerade, dass ich gar nicht wirklich weiss warum bzw. wie es dazu
gekommen ist - und vor allem, ob das wenigstens halbwegs gut ist, was
ich da zusammengkittet hab.
Also auf zu neuen Ufern...

Danke, dass Du mir schon mal ein paar Laternen hingestellt hast

viele Grüße
Josch

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.