我在名为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
我做错了什么?我无法在代码中找到问题!
编辑:
答案 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}}行。