我在尝试使用make将目标文件放在一个单独的子目录中时遇到了麻烦,这可能是一种非常基本的技术.我尝试使用此页面中的信息:http: //www.gnu.org/software/hello/manual/make/Prerequisite-Types.html#Prerequisite-Types
我从make获得以下输出:
make: *** No rule to make target `ku.h', needed by `obj/kumain.o'. Stop.
Run Code Online (Sandbox Code Playgroud)
但是ku.h是一个依赖而不是一个目标(尽管它显然是在c源文件中的#included).当我不尝试使用目标文件的子目录(即错过OBJDIR部分)时,它工作正常.为什么认为ku.h是目标?
我的makefile是这样的:(风格是在阅读各种信息来源后)
.SUFFIXES:
.SUFFIXES: .c .o
CC=gcc
CPPFLAGS=-Wall
LDLIBS=-lhpdf
VPATH=%.c src
VPATH=%.h src
VPATH=%.o obj
OBJDIR=obj
objects= $(addprefix $(OBJDIR)/, kumain.o kudlx.o kusolvesk.o kugetpuz.o kuutils.o \
kurand.o kuASCboard.o kuPDFs.o kupuzstrings.o kugensud.o \
kushapes.o )
ku : $(objects)
$(CC) $(CPPFLAGS) -o ku $(objects) $(LDLIBS)
$(objects) : ku.h kudefines.h kuglobals.h kufns.h | $(OBJDIR)
$(OBJDIR):
mkdir $(OBJDIR)
.PHONY: clean
clean :
rm $(objects)
Run Code Online (Sandbox Code Playgroud)
编辑:我应用了更改以使用vpath指令.我的版本是VPATH = xxx和vpath%.c xxx的错误混合.但是我现在得到了另一个问题(这是我添加错误的vpath之前的原始问题).这是输出: …