用于更改文件时最小化步骤的Makefile

问题描述 投票:0回答:1

所以这是给出的问题: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
c++ c shell makefile command-line
1个回答
0
投票

触摸mainProg.cpp时,必须重新编译。然后,createfile的配方不会创建文件createfile,因此它始终已过期,因此规则再次创建了cookie.hcookie.cpp,因此必须重新编译cookie.o。因此,所有内容都必须重新编译。

您可能需要:

createfile: chomp.adt
        csplit chomp.adt "/Split Here/"
        mv xx00 cookie.h
        mv xx01 cookie.cpp
        touch createfile
© www.soinside.com 2019 - 2024. All rights reserved.