Я использую Swig для создания привязки Java для библиотеки C. Система сборки написана в CMake, чтобы обеспечить нейтральность платформы. Я хочу создать JAR файл, содержащий привязки Java (т.е. Файлы .class, полученные в результате компиляции .java файлов, созданных Swig). Я пытаюсь использовать команду 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)
Есть ли лучший способ?
Ниже приведен полный пример (содержащий три файла), который иллюстрирует мой подход. Если вы хотите попробовать сами, поместите эти три файла в каталог, затем вызовите 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)
example.c
int foo() {
return 0;
}
example.i
%module example
%inline %{
extern int foo();
%}
Я использую:
- cmake версия 2.8.10.2
- Версия Java "1.6.0_37"
- Версия SWIG 2.0.9
- Mac OS X Darwin Kernel Версия 12.2.0