2017-05-10 2 views
0

Entschuldigung für das Stellen einfacher Fragen, aber ich kann nicht finden, wo das Problem ist. Ich habe ein src Verzeichnis, enthält Makefile und obj Ordner. Ein include Ordner und ein lib eins. Die Codes haben here zur Verfügung gestellt.Keine Regel, um Ziel zu machen (Projekt in verschiedenen Verzeichnissen machen)

IDIR =../include 
CC=gcc 
CFLAGS=-I$(IDIR) 

ODIR=obj 
LDIR =../lib 

LIBS=-lm 

_DEPS = hellomake.h 
DEPS = $(patsubst %,$(IDIR)/%,$(_DEPS)) 

_OBJ = hellomake.o hellofunc.o 
OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ)) 


$(ODIR)/%.o: %.c $(DEPS) 
    $(CC) -c -o [email protected] $< $(CFLAGS) 

hellomake: $(OBJ) 
    gcc -o [email protected] $^ $(CFLAGS) $(LIBS) 

.PHONY: clean 

clean: 
    rm -f $(ODIR)/*.o *~ 

es mir die folgende Störung gibt:

gcc -c -o obj/hellomake.o hellomake.c -I../include 
make: *** No rule to make target 'obj/hellofunc.o', needed by 'hellomake'. Stop. 

Er verwendet die gleiche Regel .o Dateien und hellomake Datei für die Erstellung. aber der letzte funktioniert nicht. Danke für jeden Kommentar oder Anleitung.

+0

Das Beispiel stammt von hier: (http://www.cs.colby.edu/maxwell/courses/tutorials/maketutor /) – Abolfazl

+0

Wenn Ihr Makefile in 'src' ist und Sie es in' src' ausführen, dann gibt es keine Datei namens 'hellofunc.c' in' src'. Hast du es falsch geschrieben ('hellofun.c')? –

+0

'hellomake.c' ist in' src' und 'hellofunc.c' ist in' lib'. Können Sie sich bitte Dateien anschauen? es sind nur ein paar. – Abolfazl

Antwort

0

Sie haben ein src Verzeichnis, aber Sie sagen nicht Make darüber. Make beschwert sich, dass es keine hellofunc.c gibt. (Es gibt einen src/hellofunc.c, aber stellen Sie wusste nicht, es zu suchen.) Versuchen Sie folgendes:

SRC := src 

$(ODIR)/%.o: $(SRC)/%.c $(DEPS) 
    $(CC) -c -o [email protected] $< $(CFLAGS) 
+0

Entschuldigung, ich habe immer noch den gleichen Fehler. Makefile befindet sich im Verzeichnis src. – Abolfazl

+0

@Abolfazl: Wo führst du Make aus? – Beta

Verwandte Themen