Swig с CMake не может найти заголовок включает - PullRequest
1 голос
/ 10 апреля 2020

Я пытаюсь запустить 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)

1 Ответ

1 голос
/ 11 апреля 2020

Нашел проблему. К сожалению, я использовал cmake 3.10 вместо последнего (репозиторий apt по умолчанию для cmake старый?). Обновлен до 3.17 и не было проблем.

Все, что требуется:

set_property(TARGET javaExample PROPERTY SWIG_USE_TARGET_INCLUDE_DIRECTORIES TRUE)

...