Forum: Mikrocontroller und Digitale Elektronik AVR Studio no rule to make target


von Space (Gast)


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.

von Dietmar E (Gast)


Lesenswert?

> Alle Dateien schreiben und speichern

Und alle (C und Header) dem Projekt hinzugefügt?

von Dietmar E (Gast)


Lesenswert?

> include/avr/test.c

So was macht man nicht (Sourcecode in ein Include-Verzeichnis).

von Space (Gast)


Lesenswert?

Ja, sind im Projekt im Verzeichnisbaum eingebunden

von Space (Gast)


Lesenswert?

?? Wo ist denn hier source code im Include Verzeichnis ?

von Spess53 (Gast)


Lesenswert?

Hi

Nur zur Ehrenrettung: Das ist kein Fehler vom AVR-Studio.

MfG Spess

von Space (Gast)


Lesenswert?

ok, und wo ist der FEhler... ist ja eigentlich ein recht einfaches 
Beispiel

von Dietmar E (Gast)


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.

von Dietmar E (Gast)


Angehängte Dateien:

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).

von Space (Gast)


Angehängte Dateien:

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.

von Space (Gast)


Lesenswert?

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>

von Space (Gast)


Lesenswert?

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

von Space (Gast)


Angehängte Dateien:

Lesenswert?

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)

von Space (Gast)


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.

von Dietmar E (Gast)


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).

von Space (Gast)


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)

von Dietmar E (Gast)


Angehängte Dateien:

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.

von Space (Gast)


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.

von Space (Gast)


Lesenswert?

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