gpt4 book ai didi

java - CMake 和 Java : compile, 不是 jar,对于 javah

转载 作者:行者123 更新时间:2023-11-30 09:24:56 27 4
gpt4 key购买 nike

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

  1. 编译源代码
  2. 生成标题
  3. 构建原生库
  4. 压缩整个东西

在脚本中,类似于:

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

如何在 CMake 上重现?

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

或者我应该辞职并添加 jar java 源代码,构建库并重新添加 jar 吗?

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

最佳答案

我有一个项目,我正在努力实现这样的目标。 (一些 Android NDK 使用 android-cmake 工作,取得的成功有限,尽管这不是你的问题的重点。)

CMake 确实支持构建 Java 的选项。 [见注释 1] 然而,这正是它的方向:就此构建系统而言,您的 native 代码是一等公民,所以如果您正在考虑走我所做的同一条路,请记住这一点。有些人使用 CMake 作为他们 Java 工作流的一个组件,在 ant/maven 或类似的东西下,并且有 are various plugins在“更大”构建范围内加载 CMake 项目。

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

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

Good stuff for your top-level CMakeLists.txt in projects that use Java

Contains the definition of a helpful macro: javah

A sample of how to use the macro around native libraries

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

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

Here is reference for the later我发现自己引用了很多。

祝你好运。

关于java - CMake 和 Java : compile, 不是 jar,对于 javah,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15480502/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com