我正在使用Swig为 C 库生成 Java 绑定。构建系统是用CMake编写的,以实现平台中立。我希望生成一个包含 Java 绑定的 JAR 文件(即由 Swig 创建的 .java 文件编译产生的 .class 文件)。我正在尝试使用 Cmakeadd_jar()
命令执行编译并生成 JAR 文件。
我的问题是 Swig 在构建时生成了一组 Java 文件,但在执行cmakeadd_jar()
时需要一个源文件列表。我目前正在使用 UNIX 通配符(按字面意思传递给 javac 命令行)解决这个问题。
# How do I avoid the shell wildcard?
add_jar(ExampleJNI ${CMAKE_SWIG_OUTDIR}/*.java)
有没有更好的办法?
我在下面包含一个完整的示例(由三个文件组成)来说明我的方法。如果您想自己尝试,请将三个文件放在一个目录中,然后调用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)
例子.c
int foo() {
return 0;
}
例子.i
%module example
%inline %{
extern int foo();
%}
我在用:
- cmake 版本 2.8.10.2
- Java版本“1.6.0_37”
- SWIG 版本 2.0.9
- Mac OS X 达尔文内核版本 12.2.0