Я пытаюсь запустить swig, используя CMake, и получаю
java.i:9: Error: Unable to find 'api.h'
java.i:10:Error: Unable to find 'TestStruct.h'
Я попытался установить USE_LIBRARY_INCLUDE_DIRECTORIES
, SWIG_USE_TARGET_INCLUDE_DIRECTORIES
, SWIG_USE_LIBRARY_INCLUDE_DIRECTORIES
, но безуспешно. Я, вероятно, не понимаю, что происходит. Насколько я понимаю, я ссылаюсь на цель api
, поэтому эти каталоги включений должны быть видны.
Примечание: это работает, если я копирую эти заголовки в каталог сборки, куда вызывается swig.
Любая информация будет полезна. Спасибо.
java .i
%module example
%include "std_string.i"
%{
/* Put header files here or function declarations like below */
#include "api.h"
extern TestStruct TestFunc();
%}
%include "api.h"
%include "TestStruct.h"
extern TestStruct TestFunc();
CMakeLists.txt для цели swig
find_package(SWIG REQUIRED)
include(${SWIG_USE_FILE})
find_package(Java REQUIRED)
find_package(JNI REQUIRED)
set_property(SOURCE java.i PROPERTY CPLUSPLUS ON)
swig_add_library(javaExample
TYPE SHARED
LANGUAGE java
SOURCES java.i)
target_include_directories(javaExample PRIVATE ${JNI_INCLUDE_DIRS})
target_link_libraries(javaExample PRIVATE api)
CMakeLists.txt для цели API
add_library( api SHARED
inc/api.h
src/api.cpp
)
target_include_directories( api
PUBLIC
inc
)
target_link_libraries( api
PUBLIC
FooTypes
PRIVATE
FooBar
)
add_subdirectory(src/FooBar)