C++ 带有CMake的Swig无法找到标题包括
我正在尝试使用CMake运行swig,我正在C++ 带有CMake的Swig无法找到标题包括,c++,c,cmake,swig,C++,C,Cmake,Swig,我正在尝试使用CMake运行swig,我正在 java.i:9: Error: Unable to find 'api.h' java.i:10:Error: Unable to find 'TestStruct.h' 我尝试过设置使用库包含目录,SWIG\u使用目标包含目录,SWIG\u使用库包含目录,但没有任何运气。我可能无法理解正在发生的事情。我的理解是,我正在链接到api目标,因此那些包含目录应该是可见的 注意:如果我将这些头复制到调用swig的build目录中,它就会工作 任何信息都
java.i:9: Error: Unable to find 'api.h'
java.i:10:Error: Unable to find 'TestStruct.h'
我尝试过设置使用库包含目录
,SWIG\u使用目标包含目录
,SWIG\u使用库包含目录
,但没有任何运气。我可能无法理解正在发生的事情。我的理解是,我正在链接到api
目标,因此那些包含目录应该是可见的
注意:如果我将这些头复制到调用swig的build目录中,它就会工作
任何信息都会有帮助。谢谢。
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();
swig目标的CMakeLists.txt
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)
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)
CMakeLists.txt用于api目标
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)
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)
发现了问题。不幸的是,我使用的是cmake 3.10,而不是最新版本(cmake的默认apt回购协议很旧?)。升级到3.17,没有问题 所需的一切是:
set\u属性(TARGET javaExample属性SWIG\u USE\u TARGET\u INCLUDE\u DIRECTORIES TRUE)
是的,这个SWIG\u属性在3.13版中添加到了CMake中。这是你的电话号码。