-1

我正在编写一个 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”?

提前致谢 :-)

4

1 回答 1

2

您应该真正了解 Makefile 语法。而不是自己做事,make实际上有很多功能可以帮助你。

作为初学者,还要#!/bin/bash从你的 Makefile 中删除不正确的...

然后了解$(wildcard)匹配文件,

模式替换$(patsubst %.class,%,$(CLASSES)).class去除后缀,

和模式规则,例如

%.class: %.java
    javac $<
于 2013-02-04T10:22:32.127 回答