Makefile:无法找到' menuEditor.GuiRenderJNI'''

时间:2014-09-30 15:15:13

标签: makefile java-native-interface

我在名为menuEditor的文件夹中有一个名为GuiRenderGUI的类文件。我检查了拼写,文件全部存在但我仍然无法构建.h文件。

我已尝试将我的类路径的所有排列设为../bin或../bin/menuEditor,并且该类为GuiRenderJNI或.menuEditor.GuiRenderJNI,下面的代码是" can找不到..."错误,所有其他排列简单地说'没有规则来制作目标`GuiRenderJNI.class'

# Define a variable for classpath
CLASS_PATH = ../bin/menuEditor

# Define a virtual path for .class in the CLASS_PATH directory
vpath %.class $(CLASS_PATH)

# $* matches the target filename without the extension
GuiRenderJNI.h : GuiRenderJNI.class
    javah -classpath $(CLASS_PATH) menuEditor.$*

clean :
    rm GuiRenderJNI.h GuiRenderJNI.o guirender.dll

我做错了什么?我无法在代码中找到问题!


编辑:

  • 我设法让javah通过使用完全相同的参数查找.jar文件中的类来生成头文件,保存为指向.jar的-classpath,如果是帮助

1 个答案:

答案 0 :(得分:1)

所以我认为这里的问题是vpath如何解释其论点与javah如何解释{寻找.class文件而不是寻找.jar时的区别}文件)。

当您说vpath %.class $(CLASS_PATH)时,您要告知对于符合模式%.class的任何先决条件,它应该在$(CLASS_PATH)下查找它们(通过它开头的文件名)。

当您说-classpath $(CLASS_PATH)时,您告诉java使用$(CLASS_PATH)作为查找.class.jar文件的根路径。但是,它使用该根路径的方式根据您要查找的这两种类型的文件中的哪一种而有所不同。

在查找jar文件时,java使用根路径并查找以package / module /之后命名的文件。所以javah -classpath /foo menuEditor.GuiRenderJNI会寻找/foo/menuEditor.GuiRenderJNI.jar(我相信,我不是一个java人)。 (所以我认为当你开始工作时,你创建了一个menuEditor.GuiRenderJNI.jar文件,或者接近它的东西。)

在查找类文件时,java使用根路径作为目录层次结构的开头,其中组件基于类名组件。因此javah -classpath /foo menuEditor.GuiRenderJNI会查找/foo/menuEditor/GuiRenderJNI.class

当你$(CLASS_PATH) ../bin/menuEditor GuiRenderJNI.class时,要将这些放在一起,可以在../bin/menuEditor/GuiRenderJNI.class找到它可以找到的$(CLASS_PATH)。 (这就是为什么javah的其他值给了你“没有规则来制作目标”的错误,因为它再也找不到那个类文件了。)

然而,相同的类路径(与../bin/menuEditor/menuEditor/GuiRenderJNI.class调用相结合)告诉java查找javah,由于显而易见的原因,无法找到它。

如果javah -classpath $(CLASS_PATH) $(basename $@)允许您指定要操作的类,则可以使用$(@:.h=)(非compat target-without-suffix,javah也可以使用)

如果$(CLASS_PATH)不允许您这样做,那么您需要为javah命令行(类似$(dir $(CLASS_PATH)))修改vpath

您也可以尝试(我不知道menuEditor是这样的,但我相信它确实如此)从$(CLASS_PATH)中拉出GuiRenderJNI.h: menuEditor/GuiRenderJNI.class并将其置于先决条件中定位$(CLASS_PATH),然后将javah保留在{{1}}行。