编译 NanoVM Java 虚拟机
Compiling NanoVM Java Virtual Machine
我在编译 NanoVM 项目时遇到问题:
http://www.harbaum.org/till/nanovm/index.shtml
NanoVM 是 Java AVR 微控制器的实现。我知道这效率不高。 "makefile" 文件有问题。此生成文件包含从源 .java 文件编译 Java .class 的说明。但我不知道,我如何 运行 makefile?我以前使用 javac.exe 编译器来编写 java 标准应用程序。在安装说明中写道我必须有 Java SDK (J2SE)。 SDK和JDK有什么区别吗?我安装了 JDK,我之前读到过 SDK 和 JDK 之间没有任何区别,但我不确定。我知道 makefile 文件用于管理编译,我以前使用 makefile 来编译用 C 编写的程序,但是有一些像 gcc 这样的 Java 编译器吗?抱歉我的愚蠢问题,我是 makefile 的新手,我认为解决方案非常简单。
我的生成文件:
#
# Makefile for NanoVMTool
#
APP = NanoVMTool
VERSION = 1.5
all: ../$(APP).jar
CLASSPATH = ../../java/examples
NATIVEPATH = ../../java/native
JAVAFILES = AccessFlags.java CodeInfo.java ConstPoolEntry.java FieldInfo.java \
MethodInfo.java AttributeInfo.java CodeTranslator.java \
ConstPoolEntryError.java InnerClassInfo.java NanoVMTool.java \
ClassFileReader.java CommonInfo.java ConvertException.java \
LineNumberInfo.java NativeMapper.java ClassInfo.java \
Config.java Debug.java LocalVariableInfo.java UVMWriter.java \
ClassLoader.java ConstPool.java ExceptionInfo.java \
MethodIdTable.java Uploader.java NVMComm2.java
# compile target code
$(CLASSPATH)/%.class: $(CLASSPATH)/%.java
javac -classpath $(CLASSPATH):$(NATIVEPATH) $<
%.class: %.java
echo "public class Version {" > Version.java
echo " public static String version = \"V$(VERSION)\";" >> Version.java
echo "}" >> Version.java
javac $<
../$(APP).jar: $(APP).class
jar cmf $(APP).mf ../$(APP).jar *.class
# convert and upload a class file (should be moved to vm/target Makefile)
asuro-%: $(CLASSPATH)/%.class $(APP).class
java $(APP) ../config/Asuro.config $(CLASSPATH) $*
mega8-%: $(CLASSPATH)/%.class $(APP).class
java $(APP) ../config/Mega8.config $(CLASSPATH) $*
clean:
rm -f *.class *~
为了 运行 Makefile(在 Linux / UNIX 上),您首先需要安装 "make" 和它使用的任何其他工具。在这种情况下,工具只是 java
、javac
和 jar
命令。对于最后两个,您需要 JDK 安装。
But i don't know, how can i run makefile?
将目录更改为包含 Makefile 的目录,然后 运行 'make' 使用适当的目标。在这种情况下 make all
.
Is there any difference between SDK and JDK?
没有 Java SDK 这样的东西。
... but is there some Java compiler like gcc?
Java 编译器是 javac
。这就是您的 makefile 使用的内容。
Sorry for my stupid question, i'm quite newbie in makefiles, i think solution is very simple.
真正的解决方案是查找并阅读有关 Makefile 以及如何读取、编写和使用它们的教程。 (总的来说,问新手问题的解决方法是自我教育,这样你就不是新手了!)
我在编译 NanoVM 项目时遇到问题:
http://www.harbaum.org/till/nanovm/index.shtml
NanoVM 是 Java AVR 微控制器的实现。我知道这效率不高。 "makefile" 文件有问题。此生成文件包含从源 .java 文件编译 Java .class 的说明。但我不知道,我如何 运行 makefile?我以前使用 javac.exe 编译器来编写 java 标准应用程序。在安装说明中写道我必须有 Java SDK (J2SE)。 SDK和JDK有什么区别吗?我安装了 JDK,我之前读到过 SDK 和 JDK 之间没有任何区别,但我不确定。我知道 makefile 文件用于管理编译,我以前使用 makefile 来编译用 C 编写的程序,但是有一些像 gcc 这样的 Java 编译器吗?抱歉我的愚蠢问题,我是 makefile 的新手,我认为解决方案非常简单。 我的生成文件:
#
# Makefile for NanoVMTool
#
APP = NanoVMTool
VERSION = 1.5
all: ../$(APP).jar
CLASSPATH = ../../java/examples
NATIVEPATH = ../../java/native
JAVAFILES = AccessFlags.java CodeInfo.java ConstPoolEntry.java FieldInfo.java \
MethodInfo.java AttributeInfo.java CodeTranslator.java \
ConstPoolEntryError.java InnerClassInfo.java NanoVMTool.java \
ClassFileReader.java CommonInfo.java ConvertException.java \
LineNumberInfo.java NativeMapper.java ClassInfo.java \
Config.java Debug.java LocalVariableInfo.java UVMWriter.java \
ClassLoader.java ConstPool.java ExceptionInfo.java \
MethodIdTable.java Uploader.java NVMComm2.java
# compile target code
$(CLASSPATH)/%.class: $(CLASSPATH)/%.java
javac -classpath $(CLASSPATH):$(NATIVEPATH) $<
%.class: %.java
echo "public class Version {" > Version.java
echo " public static String version = \"V$(VERSION)\";" >> Version.java
echo "}" >> Version.java
javac $<
../$(APP).jar: $(APP).class
jar cmf $(APP).mf ../$(APP).jar *.class
# convert and upload a class file (should be moved to vm/target Makefile)
asuro-%: $(CLASSPATH)/%.class $(APP).class
java $(APP) ../config/Asuro.config $(CLASSPATH) $*
mega8-%: $(CLASSPATH)/%.class $(APP).class
java $(APP) ../config/Mega8.config $(CLASSPATH) $*
clean:
rm -f *.class *~
为了 运行 Makefile(在 Linux / UNIX 上),您首先需要安装 "make" 和它使用的任何其他工具。在这种情况下,工具只是 java
、javac
和 jar
命令。对于最后两个,您需要 JDK 安装。
But i don't know, how can i run makefile?
将目录更改为包含 Makefile 的目录,然后 运行 'make' 使用适当的目标。在这种情况下 make all
.
Is there any difference between SDK and JDK?
没有 Java SDK 这样的东西。
... but is there some Java compiler like gcc?
Java 编译器是 javac
。这就是您的 makefile 使用的内容。
Sorry for my stupid question, i'm quite newbie in makefiles, i think solution is very simple.
真正的解决方案是查找并阅读有关 Makefile 以及如何读取、编写和使用它们的教程。 (总的来说,问新手问题的解决方法是自我教育,这样你就不是新手了!)