У меня есть правило с подстановочными знаками для захвата всех файлов в каталоге в качестве тестов и запуска их, а также правило .PHONY, чтобы убедиться, что я могу запустить все тесты независимо от того, были ли они ранее выполнены. Когда я запускаю make tests/PA5obj.java
или make test
, он возвращается с `make: Ничего не поделаешь для 'test'.
Иногда после того, как я добавляю новые файлы в каталог tests/
, мне нужно запустить make clean
, прежде чем он подберет их в make test
, поэтому я не уверен, есть ли проблема с кэшированием или что-то еще, но это не не объяснить, почему make test
тоже не работает.
Вот соответствующий раздел make-файла:
PROG = Test
TESTS = $(wildcard tests/*.java)
.SUFFIXES: .java.class
#-------------------------
JCC = javac
JAR = jar
#-------------------------
all: $(PROG).jar
.PHONY:test $(TESTS)
test: $(TESTS)
tests/%.java: $(PROG).jar
@echo "#### testing $@ ####"
@java -jar $(PROG).jar $@
@echo "> Passed"
$(PROG).jar: Main.class
$(JAR) cmf $(PROG)MainClass.txt $(PROG).jar $^
Main.class: Main.java
javac $^
Необходимые файлы:
TestMainClass.txt
Main-Class: Main
и Main.java
import java.util.Scanner;
import java.lang.System;
import java.io.File;
import java.io.FileNotFoundException;
class Main {
public static void main(String args[]) {
if (args.length < 1) {
throw new RuntimeException("Usage: Main <filename> ");
}
String filename = args[args.length-1];
try {
Scanner sc = new Scanner(new File(filename));
System.out.println("Contents of file: " + filename);
while (sc.hasNext()) {
System.out.println(sc.nextLine());
}
}
catch (FileNotFoundException e) {
System.out.println(e);
System.exit(1);
}
}
}
Запуск make test
должен просто прочитать все файлы в test
dir (как минимальный пример)