Makefile для минимизации шагов при смене файлов - PullRequest
0 голосов
/ 14 марта 2020

Итак, вот проблема: Ссылка на изображение проблемы

У меня внизу лежит мой make-файл, и он работает, но проблема не в том, что они ищут за. Я получаю сообщение об ошибке «Ваш make-файл выполняет слишком много работы, когда был изменен только mainProg. cpp:».

Когда изменяется mainProg. cpp, он перекомпилирует все, а не просто перекомпилирует mainProg. cpp. Я думаю, это может быть связано с тем, что каждый раз, когда я вызываю make, он должен воссоздавать файлы cook ie .h и снова готовить файлы ie. cpp из chomp.adt, и, поскольку он изменяется, make должен перекомпилировать его. Сложность состоит в том, что cook ie .h и cook ie. cpp должны создаваться через make-файл в соответствии с указаниями. И, насколько я знаю, невозможно создать только cook ie .h и cook ie. cpp при первом вызове make. Я не понимаю, как решить эту проблему без необходимости перекомпилировать cook ie .h и каждый раз готовить ie. cpp. Просто процитирую указания: «Ваш make-файл должен приводить только к минимально необходимому количеству шагов при изменении любого входного файла для этого процесса». поэтому я не получаю минимальных шагов в принципе. Может быть, я неправильно понимаю проблему, какие-либо предложения?

мой make-файл:

# 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

1 Ответ

0 голосов
/ 14 марта 2020

Когда вы нажимаете 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
...