Mit einem Makefile erstellte Dateien verschwinden (einschließlich der Binärdatei)

713
Reid

Ich baue ein Programm auf einem TS-7800 (SBC), und wenn ich make (siehe unten) starte, scheint es, dass alle Schritte normal durchlaufen werden, aber am Ende bekomme ich keine Binärdatei. Warum ist das so und wie kann ich meine Datei bekommen?

Makefile

CC= /home/eclipse/ReidTest/cc/cross-toolchains/arm-none-linux-gnueabi/bin/arm-none-linux-gnueabi-gcc   # compiler options  #CFLAGS= -O2 CFLAGS= -mcpu=arm9  #CFLAGS= -pg -Wall  # linker  LN= $(CC)  # linker options  LNFLAGS=  #LNFLAGS= -pg  # extra libraries used in linking (use -l command)  LDLIBS= -lpthread  # source files  SOURCES= HMITelem.c Cpacket.c GPS.c ADC.c Wireless.c Receivers.c CSVReader.c RPM.c RS485.c  # include files  INCLUDES= Cpacket.h HMITelem.h CSVReader.h RS485.h  # object files  OBJECTS= HMITelem.o Cpacket.o GPS.o ADC.o Wireless.o Receivers.o CSVReader.o RPM.o RS485.o  HMITelem: $(OBJECTS) $(LN) $(LNFLAGS) -o $@ $(OBJECTS) $(LDLIBS)  .c.o: $*.c $(CC) $(CFLAGS) -c $*.c  RUN : ./HMITelem  #clean: # rm -f *.o # rm -f *~ 

Ausgabe

root@ts7800:ReidTest# make /home/eclipse/ReidTest/cc/cross-toolchains/arm-none-linux-gnueabi/bin/arm-none-linux-gnueabi-gcc -mcpu=arm9 -c HMITelem.c /home/eclipse/ReidTest/cc/cross-toolchains/arm-none-linux-gnueabi/bin/arm-none-linux-gnueabi-gcc -mcpu=arm9 -c Cpacket.c /home/eclipse/ReidTest/cc/cross-toolchains/arm-none-linux-gnueabi/bin/arm-none-linux-gnueabi-gcc -mcpu=arm9 -c GPS.c /home/eclipse/ReidTest/cc/cross-toolchains/arm-none-linux-gnueabi/bin/arm-none-linux-gnueabi-gcc -mcpu=arm9 -c ADC.c /home/eclipse/ReidTest/cc/cross-toolchains/arm-none-linux-gnueabi/bin/arm-none-linux-gnueabi-gcc -mcpu=arm9 -c Wireless.c /home/eclipse/ReidTest/cc/cross-toolchains/arm-none-linux-gnueabi/bin/arm-none-linux-gnueabi-gcc -mcpu=arm9 -c Receivers.c /home/eclipse/ReidTest/cc/cross-toolchains/arm-none-linux-gnueabi/bin/arm-none-linux-gnueabi-gcc -mcpu=arm9 -c CSVReader.c /home/eclipse/ReidTest/cc/cross-toolchains/arm-none-linux-gnueabi/bin/arm-none-linux-gnueabi-gcc -mcpu=arm9 -c RPM.c /home/eclipse/ReidTest/cc/cross-toolchains/arm-none-linux-gnueabi/bin/arm-none-linux-gnueabi-gcc -mcpu=arm9 -c RS485.c /home/eclipse/ReidTest/cc/cross-toolchains/arm-none-linux-gnueabi/bin/arm-none-linux-gnueabi-gcc -o HMITelem HMITelem.o Cpacket.o GPS.o ADC.o Wireless.o Receivers.o CSVReader.o RPM.o RS485.o -lpthread 

Vielen Dank.

0

2 Antworten auf die Frage

0
sawdust

Die implizite make- Regel zum Kompilieren einer Quelle in eine Objektdatei scheint defekt zu sein. Es gibt keine Ausgabespezifikation "-o xo" für "cc -c xc". Gibt es nach dem Ausführen der Marke Objektdateien?

.c.o: $*.c 

Die obige Zielvorgabe ".co" sieht für mich auch seltsam aus. Vielleicht erkennt auch make dies nicht, und dies würde erklären, warum die implizite Regel zum Erstellen einer Objektdatei nicht angewendet wird.

Dies könnte eine bessere Zielvorgabe und Voraussetzungen für die Objektregel sein (direkt aus dem GNU-Handbuch "make"):

$(OBJECTS): %.o: %.c $(CC) -c $(CFLAGS) $< -o $@ 
Beachten Sie, dass Sie `>` nicht für Anführungszeichen verwenden sollten, sondern stattdessen mit 4 Leerzeichen einrücken. Dan D. vor 12 Jahren 0
@ Dan D. - Danke für den Tipp. sawdust vor 12 Jahren 0
Das hat funktioniert!!!! Reid vor 12 Jahren 0
0
Demi

.co ist nur speziell (eine Suffix-Regel), wenn es keine Voraussetzungen hat. In diesem Fall ist jede .c-Datei eine implizite Voraussetzung für die entsprechende .o-Datei. Wenn es eine Voraussetzung hat, versucht make, eine Datei mit dem Namen .co zu erstellen. Siehe http://www.gnu.org/software/make/manual/html_node/Suffix-Rules.html