2

使用 JNI 时,我们将在 bash/cmd 上执行以下操作:

  1. 编译源码
  2. 生成标题
  3. 构建原生库
  4. 把整个东西拉上拉链

在脚本中,类似于:

javac foo.java
javah foo
cmake . && make
jar .....

如何在 CMake 上重现?

除了使用 CUSTOM_COMMAND 之外,我只能找到 add_jar 来编译 java 源代码。是否可以在 CMake 中编译源代码而不在之后对其进行 jaring?

或者我应该辞职并添加java源代码,再次构建库和add_jar?

此外,Java_JAVAH_EXECUTABLE 应该如何与 CUSTOM_COMMAND 一起使用?

4

1 回答 1

2

我有一个项目,我试图实现这样的目标。(并且一些 Android NDK 使用 android-cmake 工作,但成功有限,尽管这不是你问题的重点。)

CMake 确实支持构建 Java 的选项。[见注 1] 然而,这正是它的方向:就这个构建系统而言,您的本机代码是一等公民,所以如果您正在考虑走与我相同的道路,请记住这一点。有些人在 ant/maven 或类似性质的东西下使用 CMake 作为其 Java 工作流程的一个组件,并且有各种插件可以在“更大”构建的范围内加载 CMake 项目。

但我认为这确实阻碍了 CMake 生成器的价值。我调查过这样做,但我们最终没有走那条路。这真的是你必须为自己做出的选择。(我发现这个项目Java,而不是Java,所以对我来说做一些更像你要求的事情是有意义的。)

事情是这样的:add_jar 有一点黑盒魔法。如果你想集成 UseJNI ......好吧,我找不到太多支持它的方式。(通读 CMake 2.8.x 中包含的模块的源代码会发现诸如 CMAKE_JNI_TARGET 之类的东西。虽然我从来没有真正做到这一点,但我还是把它包括在内。这是我对这个问题的自定义解决方案:

用于使用 Java 的项目中的顶级 CMakeLists.txt 的好东西

包含有用宏的定义:javah

如何在本机库周围使用宏的示例

[1] 在撰写本文时,似乎有两种方法:

  • 通过 project(PROJECT_NAME Java) 通知 CMake 它需要找到一个通用的 Java 编译器
  • find_package({Java, JNI}),它公开了更多功能,包括 add_jar

这是后面的参考,我发现自己参考了很多。

祝你好运。

于 2013-03-29T02:01:38.430 回答