AVR Studio no rule to make target

Gast #792808
Lesenswert?

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.
Gast #792821
Lesenswert?

> 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.
Gast #792828
Lesenswert?

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).
Angehängte Dateien:
Gast #792829
Lesenswert?

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.
Angehängte Dateien:
Gast #792842
Lesenswert?

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.
Gast #792844
Lesenswert?

> 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).
Gast #792919
Lesenswert?

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)
Gast #793051
Lesenswert?

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.
Angehängte Dateien:
Gast #793435
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren