Möchte im PRinzip nur eine Datei inkludieren. z.b. -----Hauptdatei.c------- #include <avr/test.h> foo(); ---------------------- -----test.h------- #ifndef FOO_H #define FOO_H foo(); #endif ---------------------- --------test.c--------- foo(){ return true; } ------------------------ Problem, wie geht das im AVR Studio ? Mache es bisher so: - Neues gcc Projekt anlegen - Hauptdatei im Verzeichnisbaum unter Sourcedateien anlegen - Alle Dateien schreiben und speichern - Im Dateibaum unter Sourcedateien zusätzlich die Datei test.c laden - compelieren Beim compelieren wills aber nicht durchlaufen Mit dem Fehler make: *** No rule to make target `..//C/tool/WinAVR/avr/include/avr/test.c', needed by `test.o'. Stop. Ist sicher nichts weltbewegendes, komme aber nicht drauf welche Optionen im AVR Studio ggf. anders eingestellt werden müßen.
> Alle Dateien schreiben und speichern
Und alle (C und Header) dem Projekt hinzugefügt?
> include/avr/test.c
So was macht man nicht (Sourcecode in ein Include-Verzeichnis).
ok, und wo ist der FEhler... ist ja eigentlich ein recht einfaches Beispiel
> Wo ist denn hier source code im Include Verzeichnis ?
Du arbeitest offensichtlich mit privaten Dateien im
SDK-Include-Verzeichnis (oder was soll die Zeile #include
<avr/test.h>?). So was macht man nicht. Ich vermute, Du hattest auch mal
"test.c" dort und vieleicht steht das noch in der Projekt-Konfigration.
Packe das Projekt mal und hänge es hier an, dann muss man nicht raten.
Ich habe es mal ausprobiert, keine Probleme, siehe Ahhang. Ich hoffe, dass Deine Dateien reine Testdateien waren, denn die stecken voller Mist (Prototyp in Hauptdatei zusätzlich zum inkludierten Header, kein main(), Rückgabetyp nicht deklariert, fehlendes extern).
Ja, stimmt in das AVR Verzeichnis habe ich foo.h und foo.c kopiert test.c ist das HAuptprogramm selbst das sie inkludiert. In die inkludierten Dateien sollen Funktionen rein die häufig brauche, deswegen sollten die in das AVR Verzeichnis rein, sozusagen als Ergänzung.
Projektdatei hängt oben mit an in letztem Beitrag. Die dateien foo.h und foo.c liegen wie gesagt im AVR include Verzeichnis z.b. <avr/foo.h>
Ja, mit dem Beispiel gehts, aber wie gesagt die Dateien liegen ja nicht im eigentlichen Programmverzeichnis mit drin, sondern dort wo auch die anderen ganzen AVR funktionen mit gesammelt sind
Also Frage: Wie kann ich h und c datei inkludieren wenn sie nicht im Programmverzeichnis liegt, sondern bei den anderen AVR includedateien. Anbei die Dateien. (test.c und h.c einfach ins AVR Verzeichnis ...winAVR/AVR/include/avr kopieren)
Wie gesagt passiert dann folgendes #include <avrlib/test.h> int main(){ return(0); } Führt zur oben genannten Fehlermeldung. Wenn die test.c und h im Eigentlichen Programmpfad liegen gehts, aber da sist ja nicht gewollt.
> die Dateien liegen ja nicht im eigentlichen Programmverzeichnis mit drin, sondern dort wo auch die anderen ganzen AVR funktionen mit gesammelt sind Dort haben sie rein gar nichts zu suchen. Das SDK ist off-limits. Normalerweise legt man Header in das Projektverzeichnis oder ein Unterverzeichnis davon ("includes"). Wenn Du projektübergreifend Header sammeln willst, dann lege sie in einem eigenen Verzeichnis ab und trage den Pfad dahin als Include-Suchpfad ein (in AVRStudio auf der Konfigurationsseite "Include Directories"). Dann kannst Du überall include <foo.h> schreiben - ohne das SDK zu vermurksen. C-Dateien zu sammeln ist nicht üblich (man linkt lieber mit den übersetzten Dateien -> Link Libraries) aber wenn Du es machen willst, geht es auch per Suchpfad-Angabe. Um den Projektbaum übersichtlich zu halten und nicht jede externe Datei dort eintragen zu müssen, erzeuge ich gerne eine Datei "modules.c" im Projekt, in der die Sourcecode-Module inkludiert werden. "modules.c" sieht dann z.B. so aus: #include <defs.h> // include support code for hardware units #include <ports.c> #include <lcd.c> #include <owi.c> usw. (Voraussetzung ist, dass die Module untereinander keine Konflikte haben, d.h. einheitliche Definitionen von Strukturen, Typen usw., ansonsten müssen sie einzeln übersetzt werden).
Danke schonmal für die ausführliche Antwort. Habe den includepfad in den Optionen vom AVR Studio zwar eingetragen, trotzdem erhalte ich die Fehlermeldung beim compelieren. Hintergrund ist eigentlich das ich eine Sammlung mit Funktionen projektübergreifend sammeln möchte und nicht alle Files immer ins Projektverzeichnis kopieren will. Habe jetzt ein separates Verzeichnis gemacht das im gleichen Order wie avr liegt, aber avrlib heißt ..> #include <avrlib/test.h> Das einzige was funktioniert ist wenn ich in der h datei die c datei inkludiere, aber das ist ja eigentlich nicht so gedacht. Würde eigentlich lieber sauberen Code schreiben. ggf. noch eine andere Idee woran es liegen könnte ? (Vielleicht einfach noch mal selbst versuchen)
Ich kann Deine Probleme nicht nachvollziehen. Das Archiv im Anhang
enthält ein Verzeichnis "Eigene Projekte" (ich würde es nach "Eigene
Dateien" kopieren und "Eigene Dateien" auf eine andere Partition als die
System-Partition legen). "Eigene Projekte" enthält ein Test-Projekt, das
Test-Sourcecode und Test-Header aus einem Sammel-Ordner "module"
verwendet.
> trotzdem erhalte ich die Fehlermeldung beim compelieren
Das heisst übrigens kompilieren oder (denglish) compilieren.
Interessantes Problem. Dein Code läuft prima...genauso wie es sollte. Mein Code läuft scheinbar deswegen nicht, weil ich mein includeordner auf einer anderen Festplatte habe. Solange der Ordner mit meinen gesammelten Funktionen auf der gleichen Festplatte liegt geht alles gut. Der Fehler tritt erst dann auf wenn die test.c und test.h auf einem anderen Laufwerk liegen als die Projektfiles... Wieso auch immer das auftritt. Ist aber egal, habe meine Dateien einfach mit auf das Laufwerk kopiert wo die Projektfiles liegen und jetzt geht alles. Nehme mal an das AVR Studio da was falsches in die Makefiles einträgt. Wens interessiert, die Makefiles unterscheiden sich dann in folgender Zeile: test.o: ../../../../../../libs/test.c ist ok, ordner liegt auf gleichem Laufwerk wie Projektdaten in diesem Fall beides auf Laufwerk e: und beim beispiel wo es nicht funktioniert steht dann in der MAkefile test.o: ..//C/libs/test.c Die zu inkludierenden DAteien liegen jetzt auf C:\libs und die Projektfiles auf e: und schon gehts nicht mehr Naja wie gesagt es läuft jetzt....auf jeden Fall vielen, vielen Dank für die gute Unterstützung.
Scheint ein Bug im AVR studio zu sein. ersetzt man die Zeile test.o: ..//C/libs/test.c durch test.o: C:/libs/test.c wird es fehlerfrei übersetzt.
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.