使SWIG依赖于外部项目的头文件



我有一个项目"这取决于另一个项目"B"

  • ProjectB安装一些头文件,例如B1.h, B2.h。
  • ProjectA尝试使用SWIG创建B1.h和B2.h的Python包装器。

ProjectA uses:

  • ExternalProject_Add(ProjectB ...)编译并安装ProjectB到二进制目录。
  • Swig_Add_Library(ProjectB ...)创建Python包装器;该命令创建目标器_ProjectB

我想确保在 SWIG运行之前已经安装了B1.h, B2.h,因此我添加了以下命令:add_dependencies(_ProjectB ProjectA)

在Windows上,这可以正常工作。

然而在Linux上,add_dependencies命令没有被考虑在内,它给出了:

.../ProjectA.i: 111: Error: Unable to find 'B1.h'
.../ProjectA.i: 112: Error: Unable to find 'B2.h'

我确信给SWIG的包含目录是正确的:事实上,当我第二次运行make时,这是有效的,因为ProjectB通过第一次调用make成功安装。

我使用CMake 3.13.5.

任何帮助都太好了!

我找到了一个解决方法:在Linux上,我使用:add_dependencies(ProjectB_swig_compilation ProjectA)

然而,目标ProjectB_swig_compilation在Windows上不存在(我不明白为什么,因为我在Linux和Windows上使用相同版本的CMake)。

最后,这是我在CMakeLists.txt中所做的:
if (WIN32 AND NOT MINGW)
add_dependencies(_ProjectB ProjectA)
else ()
add_dependencies(ProjectB_swig_compilation ProjectA)
endif ()

最新更新