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


von Björn Baier (Gast)


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

von Karl H. (kbuchegg)


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.

von Jürgen Oelkoch (Gast)


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.

von Björn Baier (Gast)


Lesenswert?

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

von Björn Baier (Gast)


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

von Karl H. (kbuchegg)


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.

von Björn Baier (Gast)


Angehängte Dateien:

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

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.