そのため、いくつかのファイル (*.in) を C++ プログラムへの入力として受け取り、それらの出力 (result.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 の 3 つのファイルに対してのみ %.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
さらに、私がやろうとしていることを達成するためのより良い方法、またはこのメイクファイルに加えることができるその他の改善がある場合 (私はかなり新しいので)、提案をいただければ幸いです。
編集: ブロック (%.in: %.out %.err) に 2 番目の依存関係を追加すると、5 つのファイルすべてに対してブロックが実行されます。なぜこのように機能するのかはまだわかりませんが、以前の方法では機能しません。