mikrocontroller.net

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


Autor: Space (Gast)
Datum:

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

Autor: Dietmar E (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Alle Dateien schreiben und speichern

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

Autor: Dietmar E (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> include/avr/test.c

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

Autor: Space (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, sind im Projekt im Verzeichnisbaum eingebunden

Autor: Space (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
?? Wo ist denn hier source code im Include Verzeichnis ?

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

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

MfG Spess

Autor: Space (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, und wo ist der FEhler... ist ja eigentlich ein recht einfaches 
Beispiel

Autor: Dietmar E (Gast)
Datum:

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

Autor: Dietmar E (Gast)
Datum:
Angehängte Dateien:

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

Autor: Space (Gast)
Datum:
Angehängte Dateien:

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

Autor: Space (Gast)
Datum:

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

Autor: Space (Gast)
Datum:

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

Autor: Space (Gast)
Datum:
Angehängte Dateien:

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

Autor: Space (Gast)
Datum:

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

Autor: Dietmar E (Gast)
Datum:

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

Autor: Space (Gast)
Datum:

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

Autor: Dietmar E (Gast)
Datum:
Angehängte Dateien:

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

Autor: Space (Gast)
Datum:

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

Autor: Space (Gast)
Datum:

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

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.