Я чрезвычайно новичок в make-файлах и просто провел целый день, пытаясь понять, как автоматизировать мое тестирование. Для этого проекта у меня есть одна программа, main.c, и она принимает в качестве параметров входной и выходной файл. Входной файл имеет форму «test- {filler} .txt», поэтому файл примера может быть «test-invalid-opcode.txt». Выходной файл будет иметь форму "out- {filler} .txt", поэтому он будет иметь форму "out-invalid-opcode.txt". Затем я хотел бы сравнить вывод с правильным выводом, сохраненным в "correct- {filler} .txt", так что это будет "correct-invalid-opcode.txt". Поэтому каждый тест будет иметь вход, выход и правильный вывод. Я хотел бы проверить, имеют ли выходные данные и правильный вывод какие-либо различия, и я хотел бы, чтобы это выполнялось на каждом тестовом файле с префиксом «test-». Я прочитал много спецификаций make-файла и много разных примеров, но я действительно не понимаю, как с этим справиться. Любая помощь будет очень признательна.
Вот что мне нужно для запуска одного теста:
CC=gcc
CFLAGS=-o
main.o: main.c
$(CC) $(CFLAGS) main.o $<
.PHONY: test
test: main.o test-provided.txt test-out.cs
./program test-provided.txt test-out.txt
diff -q test-out.txt out-provided.txt
Макет того, что я хочу, чтобы автоматический тест был что-то вроде
.PHONY: autotest
autotest: program
$(foreach <file with "test-" prefix> run:
main.o <test-name> <out-name>
diff -q <correct-name> <out-name>
Но я действительно заблудился о том, как это осуществить.
Спасибо, извините, я не смог опубликовать больше кода. Я пробовал много разных вещей, но ни одна из них не была даже достаточно близкой, чтобы ее можно было опубликовать.
Изменить, чтобы показать рабочую окончательную версию:
program: main.c
$(CC) $(CFLAGS) $a $<
TEST_INPUTS := $(wildcard test-*.txt)
.PHONY: autotest $(TEST_INPUTS)
autotest: $(TEST_INPUTS)
$(TEST_INPUTS): test-%.txt: program
echo '' > out-$*.txt
./$< $@ out-$*.txt
diff -q correct-$*.txt out-$*.txt