所以我正在编写一个makefile,它将一些文件(*.in)作为我的C++程序的输入,并将它们的输出(results.out)与给定的正确输出(*.out)进行比较。具体来说,我有文件 t01.in、t02.in、t03.in、t04.in 和 t05.in。我已经验证了 $TESTIN = t01.in t02.in t03.in t04.in t05.in。问题是它似乎只对其中三个文件 1,3 和 4 运行 %.in: %.out 块。为什么要这样做?
OUTPUT = chart
COMPILER = g++
SOURCES = chart.cpp
HEADERS =
OBJS = $(SOURCES:.cpp=.o)
TESTIN = tests/*.in
all: $(OUTPUT)
$(OUTPUT): $(OBJS)
$(COMPILER) *.o -o $(OUTPUT)
%.o: %.cpp
clear
$(COMPILER) -c $< -o $@
test: $(TESTIN)
%.in: %.out
./$(OUTPUT) < $@ > tests/results.out
printf "\n"
ifeq ($(diff $< tests/results.out), )
printf "\tTest of "$@" succeeded for stdout.\n"
else
printf "\tTest of "$@" FAILED for stdout!\n"
endif
此外,如果有更好的方法来完成我正在尝试做的事情,或者我可以对这个 makefile 进行任何其他改进(因为我对此很陌生),我们将不胜感激。
编辑:如果我向块添加第二个依赖项(%.in: %.out %.err),它将为所有五个文件运行该块。仍然不知道为什么它以这种方式工作,但不是以前的方式。