www.mikrocontroller.net

Forum: Compiler & IDEs include Dateien


Autor: josch (Gast)
Datum:

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

Autor: Jörg Wunsch (Gast)
Datum:

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

Autor: josch (Gast)
Datum:

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

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.