簡體   English   中英

在 CMake 中使用 Java 到 GENERATE_NATIVE_HEADERS

[英]UseJava in CMake to GENERATE_NATIVE_HEADERS

CMake 似乎真的很酷。 就在前幾天,我發現我可以用它來將 Java 源代碼編譯成 jars。 GENERATE_NATIVE_HEADERS還有一個選項。 但是,它只是不會為我生成標題。 生成的 Makefile 調用javac而沒有-h someplace 任何提示我可能會遺漏什么? 這是我到目前為止:

CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
find_package(Java 11 REQUIRED)
find_package(Java COMPONENTS Development)
find_package(JNI REQUIRED)
include(UseJava)
add_jar(SomeJava 
    SomeJava.java
    ENTRY_POINT SomeJava
    GENERATE_NATIVE_HEADERS SomeJava-native
)
add_library(native SHARED
    native.c
)
target_include_directories(native PRIVATE
    ${JNI_INCLUDE_DIRS}
)

本地文件

#include "SomeJava.h"
JNIEXPORT void JNICALL Java_SomeJava_printHelloWorld(JNIEnv * env, jclass cls) {
    printf("Native Hello World!\n");
}

一些Java.java

public class SomeJava {
    public static void main(String[] args) {
        printHelloWorld();
    }
    static {
        System.loadLibrary("native");
    }
    public static native void printHelloWorld();
}

如果我手動調用javac來生成SomeJava.h ,它工作得很好。

根據文檔中的示例,您似乎想要鏈接到名為SomeJava-native生成的INTERFACE目標:

然后,可以使用 target_link_libraries() 命令將生成的本機頭文件目標用於編譯 C/C++ 源代碼。

目前,您的代碼似乎沒有使用此目標,因此您可以將其添加到 CMake 文件的末尾:

target_link_libraries(native PRIVATE SomeJava-native)

此外,請確保您的 CMake 版本為 3.11 或更高版本,因為GENERATE_NATIVE_HEADERS功能在早期版本中不可用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM