相关疑难解决方法(0)

如何将对象文件放在单独的子目录中

我在尝试使用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之前的原始问题).这是输出: …

makefile gnu-make

56
推荐指数
5
解决办法
11万
查看次数

标签 统计

gnu-make ×1

makefile ×1