我正在编写Makefile以编译Java程序。它看起来像这样:
#!/bin/bash
LANG=en
CURRENT_EX = hello.java
RUN_CURRENT_EX = for i in `ls *.class`; do java *$\.class ; done
RM = rm -f
TRASH = *~ *.class
ALL = $(RM) $(THRASH) && \
javac $(CURRENT_EX)
all:
$(ALL) && \
$(RUN_CURRENT_EX)
当我编译Java程序时(假设它的名字是“hello.java”),它就像这样工作。起初,我放入了Linux终端:
$ javac hello.java
它叫一个名为“Hello.class”的文件,为了执行它,我把
$ java Hello
问题是我想通过Makefile自动完成这项任务,我在这一行遇到了麻烦:
RUN_CURRENT_EX = for i in `ls *.class`; do java *$\.class ; done
它表示“java * $ .class”。我想要做的是只从“Hello.class”文件名中取出字符串“Hello”,但我的正则表达式不起作用:
$ make all
Error: Could not find or load main class Hello.class
make: *** [all] Error 1
我如何从“Hello.class”中删除字符串“.class”?
提前致谢: - )
答案 0 :(得分:2)
你应该真正了解Makefile语法。 make
实际上有很多功能可以帮助你,而不是自己做事。
作为初学者,还要从Makefile中删除不正确的#!/bin/bash
...
然后了解匹配文件的$(wildcard)
,
模式替换$(patsubst %.class,%,$(CLASSES))
以删除.class
后缀,
和模式规则,例如
%.class: %.java
javac $<