小编k-w*_*all的帖子

将add_jar与Swig生成的Java绑定一起使用的正确方法是什么?

我正在使用Swig为C库生成Java绑定.构建系统是用CMake编写的,以实现平台中立性.我希望生成一个包含Java绑定的JAR文件(即由Swig创建的.java文件的编译产生的.class文件).我正在尝试使用Cmake add_jar()命令来执行编译并生成JAR文件.

我的问题是Swig在构建时生成一组Java文件,但add_jar()在执行cmake时需要一个源文件列表.我目前正在使用UNIX通配符解决问题(它通常传递给javac命令行).

# How do I avoid the shell wildcard?
add_jar(ExampleJNI ${CMAKE_SWIG_OUTDIR}/*.java)
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?

我在下面提供了一个完整的例子(包含三个文件),说明了我的方法.如果您想自己尝试,请将三个文件放在一个目录中,然后调用cmake . ; make VERBOSE=1.

的CMakeLists.txt

cmake_minimum_required (VERSION 2.8)
find_package(Swig REQUIRED)
find_package(Java REQUIRED)
find_package(JNI REQUIRED)
include(UseJava)
include(UseSWIG)

project (Example)

add_library (Example example.c)

set(CMAKE_SWIG_FLAGS -package org.mycompany)
set(CMAKE_SWIG_OUTDIR ${CMAKE_CURRENT_BINARY_DIR}/src/main/java/org/mycompany)

swig_add_module(ExampleSWIG java example.i)
include_directories(${JNI_INCLUDE_DIRS})

swig_link_libraries(ExampleSWIG Example)

# How do I avoid the wildcard?
add_jar(ExampleJNI ${CMAKE_SWIG_OUTDIR}/*.java)

add_dependencies(ExampleJNI ExampleSWIG)
Run Code Online (Sandbox Code Playgroud)

example.c

int foo() {
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

example.i

%module example

%inline …
Run Code Online (Sandbox Code Playgroud)

java swig cmake

13
推荐指数
2
解决办法
4251
查看次数

标签 统计

cmake ×1

java ×1

swig ×1