Hallo, ich will im Makefile alle source files in SRC eingeben. ich weiß aber nicht, was die Syntax ist. ich habe folgenden Code geschrieben. es funktionniert aber nicht. ich will 3 Dateien eingeben. # List C source files here. (C dependencies are automatically generated.) SRC += $(TARGET).c timerInit.c\$(TARGET).c inb_lcd_4Zeilen.c\$(TARGET).c keypad_lcd.c Die Dateien sind: timerInit.c inb_lcd_4Zeilen.c keypad_lcd.c ich hoffe Sie mein Problem verstehen, und, dass Sie mir etwas vorschalgen könnten. Mit freundlichen Grüßen Christian
http://mrbook.org/tutorials/make/ ... CC=g++ CFLAGS=-c -Wall LDFLAGS= SOURCES=main.cpp hello.cpp factorial.cpp OBJECTS=$(SOURCES:.cpp=.o) EXECUTABLE=hello all: $(SOURCES) $(EXECUTABLE) $(EXECUTABLE): $(OBJECTS) $(CC) $(LDFLAGS) $(OBJECTS) -o $@ .cpp.o: $(CC) $(CFLAGS) $< -o $@ ...
Hallo Christian,
ganz so einfach funktioniert das nicht.
Ein Makefile dient dazu, die Abhängigkeiten zwischen Dateien so
darzustellen, daß das Make-Tool sie ausführen kann. Die Syntax ist nicht
trivial und außerdem gibt es viele Unterschiede zwischen verschiedenen
Make-Varianten, darum ist es nicht einfach, Dir hier "freihändig" einen
vernünftigen Rat zu geben.
Der Ausschnitt aus dem Makefile, den Du gepostet hast, soll offenbar
Dateien zu einer Umgebungsvariable namens SRC hinzufügen. Wahrscheinlich
ist dieses Makefile in irgendein komplexeres Makefile-System
eingebunden, wie es manche Entwicklungsumgebungen haben, z. B. die von
QNX, und wo SRC dann ausgewertet wird.
Vermutlich muß das so lauten:
SRC += timerInit.c inb_lcd_4Zeilen.c keypad_lcd.c
Es kann sein, daß da noch ein Pfad fehlt, also
SRC += $(SRCDIR)/timerInit.c $(SRCDIR)/inb_lcd_4Zeilen.c \
$(SRCDIR)/keypad_lcd.c
oder so ähnlich. Wie genau die Environmentvariable heißt, hängt von
Deiner konkreten Umgebung ab. Du kannst auch für den Anfang absolute
Pfade nehme, vielleicht brauchst Du es auch nicht, falls die
Quellcodedateien direkt im Projektverzeichnis stehen.
Ich würde als Pfadtrenner Vorwärtsstriche verwenden, da
Windows-Entwicklungsumgebungen damit meistens klarkommen und
ursprünglich von UNIX-Systemen stammende Entwicklungssysteme das meist
auch unter Windows brauchen.
Du darfst in Dateilisten keine Zeilenumbrüche verwenden oder mußt am
Ende der Zeile einen Backslash als Markierung, daß die Zeile fortgesetzt
wird, verwenden. Dein Beispiel ist also auf jeden Fall falsch, falls es
nicht das Forensystem war, das da einen Umbruch eingefügt hat.
Eine andere häufige Falle (die mit Deinem konkreten Problem im Moment
nichts zu tun hat): Wenn Du Regeln und Abhängigkeiten definierst, dann
müssen die Einrückungen untergeordneter Zeilen bei vielen
make-Programmen mit echten Tab-Zeichen, nicht mit Leerzeichen erfolgen.
Es gibt Texteditoren, die den Unterschied anzeigen können oder das
automatisch machen.
Ich hoffe, es bringt Dich weiter. Wenn nicht, dann bleibt Dir nichts
anderes übrig, als Dich mal in die Feinheiten von makefile-Syntax
einzulesen und, soweit in Deinem Entwicklungssystem möglich,
Debugausgaben einzubauen ("echo $(SRC)" oder so), um herauszubekommen,
wo etwas falsch eingebunden wird.
Viel Erfolg!
Tschüß, Matthias
Danke! es funktionniert aber nicht.
ich habe eine Datei "timerInit.c und timerInit.h" im Projekt importiert
(uC_FG heißt das Projekt) und im Makefile habe ich Folgenden
geschrieben:
...
TARGET = uC_FG
...
SRC = $(TARGET).c timerInit.c
...
und es funktionniert.
wenn ich aber mehrere Dateien importiere:
inb_lcd_4Zeilen.c und inb_lcd_4Zeilen.h
keypad_lcd.c und keypad_lcd.h
timerInit.c und timerInit.h
dann funktionniert es nicht. Ich vermute ich sollte etwas bei SRC ändern
aber die Syntax könne ich nicht. ich habe mit folgender Änderung
probiert, funktionniert aber nicht:
SRC += $(TARGET).c timerInit.c/$(TARGET).c inb_lcd_4Zeilen.c/$(TARGET).c
keypad_lcd.c
ERROR:
make: Leaving directory
`C:/Users/HP_Advanced/Documents/ArbeitsordnerChristian/testprogramme/uC_
FG/uC_FG'
make: *** No rule to make target `uC_FG/TARGET', needed by `elf'.
Stop.
und wenn ich mit folgendem Code probiere:
C_SRCS += \
inb_lcd_4Zeilen.c \
keypad_lcd.c \
timerInit.c
dann habe ich dise Fehlermeldung:
undefined reference to `main'
Was soll ich tun? Anhang das Makefile
Danke
MfG
Christian
Hab's nicht getestet, aber naheliegend wäre doch ganz einfach
1 | SRC = $(TARGET).c timerInit.c inb_lcd_4Zeilen.c keypad_lcd.c |
bzw.
1 | SRC = $(TARGET).c |
2 | SRC += timerInit.c inb_lcd_4Zeilen.c keypad_lcd.c |
Beide Varianten tun das Gleiche. Ich gehe dabei davon aus, dass es eine Datei uC_FG.c gibt, die das Hauptprogramm main enthält.
danke sehr, bin so froh, es funktionniert mit: SRC = $(TARGET).c timerInit.c inb_lcd_4Zeilen.c keypad_lcd.c Gott segnet sie!!! MfG Christian
Und nächstes mal keine 2 Threads zum gleichen Thema aufmachen. Das wird nämlich gar nicht gerne gesehen, weil man im anderen Thread nicht sieht, was bereits geantwortet wurde.
Ja entschuldigung. Es hat mir so aufgefallen als ob keiner bei dem anderen Diskussion antworten würde, weil ich die nicht angefangen habe. ich habe dann lieber auch hier geschrieben, da ich die Diskussion hier angefangen habe. Es tut mir wirklich Leid. Danke für den Hinweis! MfG Christian
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.