[英]UseJava in CMake to GENERATE_NATIVE_HEADERS
CMake 似乎真的很酷。 就在前幾天,我發現我可以用它來將 Java 源代碼編譯成 jars。 GENERATE_NATIVE_HEADERS還有一個選項。 但是,它只是不會為我生成標題。 生成的 Makefile 調用javac
而沒有-h someplace
。 任何提示我可能會遺漏什么? 這是我到目前為止:
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");
}
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.