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.
Das Beispiel stammt von hier: (http://www.cs.colby.edu/maxwell/courses/tutorials/maketutor /) – Abolfazl
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')? –
'hellomake.c' ist in' src' und 'hellofunc.c' ist in' lib'. Können Sie sich bitte Dateien anschauen? es sind nur ein paar. – Abolfazl