www.mikrocontroller.net

Forum: Compiler & IDEs Datei aus Unterverzeichnis einbinden: nötige Änderungen?


Autor: Björn Baier (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wollte einmal testweise ein LCD an einen uC anschließen und ein wenig
"spielen"/Erfahrung sammeln. Habe mir dazu das Beispiel von Peter
Fleury besorgt und die Anpassungen vorgenommen.
=> Läuft perfekt
Dann habe ich die lcd.c. und lcd.h in "mein" Verzeichnis kopiert und
selber etwas mit dem Display gemacht.
=> Läuft perfekt
Nun das Problem: der Übersichtlichkeit halber, würde ich gerne zum
Schluss folgende Verzeichnisstruktur haben:

C:\AVR_Projekte\Test (Hauptverzeichnis/Root)
C:\AVR_Projekte\Test\test.c (enthält die main Funktion)
C:\AVR_Projekte\Test\test.h
C:\AVR_Projekte\Test\Makefile
C:\AVR_Projekte\Test\LCD\lcd.c
C:\AVR_Projekte\Test\LCD\lcd.h

d.h. ich würde externe Quellen/Dateien gerne aus meinem
Hauptverzeichnis "raus" haben und in ein separates Unterverzeihcnis
packen, so dass ich später auch noch weiß, was zusammengehört. Dazu
habe ich in der test.c folgendes eingefügt:

#include "LCD/lcd.h"

und im Makefile den SRC Zweig erweitert:

SRC = $(TARGET).c
SRC += lcd.c

Aber irgendwie geht das Display nun nicht mehr :=( Fehlermeldungen
erhalte ich dummerweise auch nicht.
Deshalb die Frage: Was muss alles gemacht werden um Dateien aus einem
Unterverzeichnis einzubinden?

Gruß,

Björn

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Include ist so ok.
Aber im Makefile solltest du schon auch mitteilen, dass
lcd.c sich jetzt in einem Subverzeichnis befindet:

SRC = $(TARGET).c lcd/lcd.c

Ob in einem Makefile die Sache mit += erlaubt ist, weiss
ich jetzt gar nicht. Schon lange nicht mehr gemacht.

Autor: Jürgen Oelkoch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Björn

Mich wundert's, dass Du da keine Fehlermeldung bekommst. Wenn im
Makefile lcd.c als Quelle steht, dann sucht Make die im gleichen
Verzeichnis. Man kann zwar Headerdateien (*.h) über den Schalter -I dem
Compiler aus anderen Verzeichnissen anmelden. Jedoch kenne ich keine
Ausführungen, dass das auch mit Make ginge.
Wirf einfach alles, was zum Programm gehört in ein DIR, das tut ja auch
nicht so weh. Außerdem erspart's Verwirrung, wenn mann in einer *.h
portspezifische  Einstellungen vornimmt (oft bei lcd.h). Die passen
beim nächsten Prog meist nicht mehr.

Autor: Björn Baier (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

die Sache mit += ist unter
http://www.mikrocontroller.net/articles/AVR-GCC-Tu...
angegeben und sah mir "schöner" aus, da ich so einfacher sehe wie
viele Dateien hinzugekommen sind.
Die fehlende Fehlermeldung beruht wohl auf mir: hatte die lcd.c und .h
einfach wieder ins Hauptverzeichnis kopiert, da ich "ruhe" haben
wollte.
Nun geht es aber.

Danke,

Björn

Autor: Björn Baier (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

zu früh gefreut: nach einem make clean gitbt es nun eine
Fehlermeldung:

FATAL: can't create /LCD/lcd.o: No such file or directory
make.exe: *** [/LCD/lcd.o] Error 1

Gibt es eigentlich eine Alternative zu WinAVR? Das Programmers Notepad
kann mich nicht so richtig überzeugen (wie brennt ihr z.B. einfach die
Fuses, jedes mal eine Dos Box öffnen und avrdude Befehle per Hand
eingeben?), eine Datei im Projekt mal schnell umbenennen: Fehlanzeige
usw.
Na ja, wäre schon glücklich wenn es wenigstens mit Unterverzeichnissen
klappen würde. Das geht bei jeder IDE im PC-Bereich...

Björn

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> /LCD/lcd.o

Durchsuch noch mal dein Makefile.
/LCD ist, da er mit einem / beginnt, ein absoluter Pfad.
Also von der Wurzel des Dateiverzeichnisses runter. Ich bin
mir aber sicher, dass du auf der Wurzel kein Verzeichnis namens
LCD hast. Das steckt irgendwo in einem Subpfad.
Der führende / muss weg. Der Pfad den du möchtest lautet
  LCD/lcd.o

Das ist jetzt ein relativer Pfad. Relativ zum aktiven Verzeichnis
wird das Unterverzeichnis LCD benutzt um lcd.o zu speichern.

Autor: Björn Baier (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Verzeichnisstruktur ist wie oben im ersten Beitrag angegeben.
In der test.c steht bei den includes

#include "lcd.h"

im makefile steht auch "nur"

SRC = $(TARGET).c
SRC += LCD/lcd.c

Den führenden / habe ich nicht davor gemacht, also so wie du es in
deinem ersten Beitrag angegeben hast. Der ist automatisch immer (?) mit
davor.

Björn

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.