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
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.