Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 带有CMake的Swig无法找到标题包括_C++_C_Cmake_Swig - Fatal编程技术网

C++ 带有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目录中,它就会工作 任何信息都

我正在尝试使用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

 %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中。这是你的电话号码。