У меня есть проект Java, который использует GNU make для компиляции исходных файлов, а также для создания JAR. После того, как я ввел вложенное перечисление, создается новый файл main_classname$inner_classname.class
.
У меня проблемы с включением этого файла в JAR.
Ниже приведена соответствующая часть моего Makefile:
JARNAME=Project.jar
CLASSES=\
Main.class \
Main$$Inner.class
И это отрывок из файла target , который включен в Makefile:
$(JARNAME): $(CLASSES)
jar cvf $(JARNAME) $(CLASSES)
Внутренний класс не добавляется в JAR, поскольку оболочка расширяет строку после знака доллара.
Я пытался поставить обратную косую черту перед $$, то есть Main\$$Inner.class
, но жаловался:
make: * Нет правил для создания цели Main\$Inner.class', needed
by
Project.jar '. Стоп.
Другой подход состоял в том, чтобы попробовать следующее изменение, чтобы избежать доллара, но безрезультатно:
ESCAPED_CLASSES=$(patsubst %$$,%\$$,$(CLASSES))
$(JARNAME): $(CLASSES)
jar cvf $(JARNAME) $(ESCAPED_CLASSES)
Что можно сделать, чтобы решить эту проблему, особенно без жесткого кодирования особых случаев в файле target ?