制作Java Makefile

编辑:基本上,我试图做的事情与键入“javac sim.java”然后“java sim(commands)”相同。 有没有办法用makefile替换它?

所以我在网上看了很多例子,并尝试将它们修改为我需要的,但没有任何效果。 我需要一个makefile,这样我的老师就可以通过在终端输入“make”来创建我的项目(由于某种原因,这是项目的要求)。 我的最终目标是能够键入“sim”,然后输入我的代码定义的所需命令。 代码在eclipse中运行,但我无法在终端中使用这些命令运行它。 它将生成文件,但当我尝试在终端中键入“sim ….(arguments)”时,它会显示“sim:command not found”。 我确定这是一个愚蠢的问题,但我们在学校没有学到这一点,而且我没有使用Makefile的经验。

下面是我的makefile。

JFLAGS = -g JC = javac OPT = -O3 #OPT = -g WARN = -Wall sim: sim.class sim.class: sim.java $(JC) $(JFLAGS) sim.java clean: $(RM) sim.class clobber: $(RM) sim.class 

使用带有java的make可以是一个练习用锤子驱动螺丝,只要你有一个以上的课程。

使用java代码将使用包。 因此,您将拥有一个复杂的目录树,它反映了您的包结构,其中包含.java源文件。 写作制定“看到”所有这些文件的规则很痛苦。

您应该同时在所有源文件上调用javac以获得正确的结果。 因此,“运行一个命令将一个源文件转换为一个编译文件”的常用make模式不能很好地工作。

但是,您现在的主要问题似乎是您希望java生成可执行文件; 一个名为’sim’的文件。 不,不会以任何简单的方式发生。 java编译器生成.class文件; 它们的整个树,用于源文件。 您可以直接从它们运行,也可以将它们打包到JAR文件中。

为了获得一个看似简单的命令行可执行文件的东西,你需要使用一个更复杂的工具,用前面的脚本包装所有这些。

现在,您只需要:

 java -cp . NAME_OF_THE_CLASS_IN_sim.java 

在makefile完成后运行。

对于没有很多文件或依赖项的简单项目,我只使用脚本。

建立:

 javac -cp .;* *.java 

跑步:

 java -cp .;* SomeMainClass 

替换. 您需要的任何路径来源。 *将使用默认路径上的任何jar或使用不同的路径,如lib/*

make通过执行其依赖项执行配方,然后执行配方本身。 因此,如果您将运行已编译代码的命令添加到顶部配方,则键入“make”也将在编译后运行代码。 我简直不敢相信有多少人不知道这个!

就像是:

 sim: sim.class java sim 

会做你的导师所要求的。