【发布时间】:2015-05-25 17:54:35
【问题描述】:
我正在尝试遵循本教程: http://www.cs.colby.edu/maxwell/courses/tutorials/maketutor/
当我在最后一个 makefile (#5) 时,“make”无法继续,因为(错误提示)No rule to make target "obj/hellomake.o", needed by "hellomake"。这段代码尝试编译源文件并将libs、srcs、objs放入各自的文件夹中。
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 $@ $< $(CFLAGS)
hellomake: $(OBJ)
gcc -o $@ $^ $(CFLAGS) $(LIBS)
.PHONY: clean
clean:
rm -f $(ODIR)/*.o *~ core $(INCDIR)/*~
我已经盯着它看了一个小时了,这不是一段复杂的代码,但我看不出问题所在。我怀疑问题发生在这里:
$(ODIR)/%.o: %.c $(DEPS)
$(CC) -c -o $@ $< $(CFLAGS)
hellomake: $(OBJ)
gcc -o $@ $^ $(CFLAGS) $(LIBS)
我只是看不出有什么问题。请帮忙。
【问题讨论】:
-
这意味着你需要一个像
hellomake:这样的目标,有点像obj/hellomake.o:。但是,我想知道为什么您需要所有这些。这是一个更简单的 make 文件的摘录,该文件为 Linux 上的 Informix 4GL 构建嵌入式 gcc 对象。GENSRC=chkaddr_test.c createICSLogFile.c print_width.c termlp.c lptmp.c \ rpt_view.c unschd.c check_at.c setSchedPerms.c nfilter.c batchpay.c \ GENOBJ=$(GENSRC:c=o) chkaddr_test: chkaddr_test.o chkaddr.o cc -Wall -Wshadow -g -o chkaddr_test chkaddr_test.c chkaddr.c