所以这是给出的问题:Link to picture of the problem
我的makefile在下面,并且可以运行,但是问题在于它不是他们正在寻找的解决方案。我收到错误消息“仅mainProg.cpp更改后,您的makefile会执行过多工作:”。
当mainProg.cpp更改时,它将重新编译所有内容,而不仅仅是重新编译mainProg.cpp。我想这可能是因为每次我调用make时,都必须再次从chomp.adt重新创建cookie.h和cookie.cpp文件,并且由于其更改,make必须重新编译它。棘手的部分是必须根据说明通过makefile创建cookie.h和cookie.cpp。据我所知,没有方法只能在第一次调用make时创建cookie.h和cookie.cpp。我不明白如何解决这个问题而不必每次都重新编译cookie.h和cookie.cpp。仅引用其中的指示即可:“当更改此过程的任何输入文件时,您的makefile应该只导致所需的最少步骤数。”所以我基本上没有得到最低限度的步骤。也许我理解问题是错误的,有什么建议吗?
我的文件:
# Macro definitions for "standard" language compilations
#
# First, define special compilation flags. These may change when
# we're done testing and debugging.
CPPFLAGS=-g -DDEBUG
#
# The following is "boilerplate" to set up the standard compilation
# commands:
.SUFFIXES:
.SUFFIXES: .cpp .c .cpp .h .o
.c.o: ; gcc $(CPPFLAGS) -c $*.c
.cpp.o: ; g++ $(CPPFLAGS) -c $*.cpp
#
# Targets:
#
all: createfile mainProg.o cookie.o
g++ -g mainProg.o cookie.o
mv a.out playChomp
mainProg.o: mainProg.cpp
cookie.o: createfile cookie.cpp cookie.h
createfile:
csplit chomp.adt "/Split Here/"
mv xx00 cookie.h
mv xx01 cookie.cpp
clean:
rm *.o cookie.h cookie.cpp playChomp
触摸mainProg.cpp
时,必须重新编译。然后,createfile
的配方不会创建文件createfile
,因此它始终已过期,因此规则再次创建了cookie.h
和cookie.cpp
,因此必须重新编译cookie.o
。因此,所有内容都必须重新编译。
您可能需要:
createfile: chomp.adt
csplit chomp.adt "/Split Here/"
mv xx00 cookie.h
mv xx01 cookie.cpp
touch createfile