Datei aus Unterverzeichnis einbinden: nötige Änderungen?

Gast #412228
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
#412229
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.
Gast #412230
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.
Gast #412231
Moin,

die Sache mit += ist unter
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Quellcode-Dateien_einstellen
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
Gast #412232
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
#412233
> /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.
Gast #412234
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
Angehängte Dateien:

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 20 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.