CMake SWIG 依赖于外部项目的 headers
CMake SWIG dependency on headers of external project
我有一个项目“A”依赖于另一个项目“B”。
- ProjectB 安装一些 headers,例如 B1.h、B2.h。
- ProjectA 尝试使用 SWIG 创建 B1.h 和 B2.h 的 Python 包装器。
ProjectA 使用:
ExternalProject_Add(ProjectB ...)
将 ProjectB 编译并安装到二进制目录中。
Swig_Add_Library(ProjectB ...)
创建 Python 包装器;此命令创建一个目标 _ProjectB
.
我想确保 B1.h、B2.h 在 SWIG 运行 之前安装 ,因此我添加了以下命令:
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 的 include 目录是正确的:事实上,当我第二次 运行 make
时,这是有效的,因为 ProjectB 是通过第一次调用 make
.
我使用 CMake 3.13.5.
任何帮助都会很棒!
我找到了一个解决方法:在 Linux,我使用:add_dependencies(ProjectB_swig_compilation ProjectA)
然而,目标 ProjectB_swig_compilation
在 Windows 上不存在(我不明白为什么,因为我在 Linux 和 [=20= 上使用相同版本的 CMake ]).
最终,这是我在 CMakeLists.txt 中所做的:
if (WIN32 AND NOT MINGW)
add_dependencies(_ProjectB ProjectA)
else ()
add_dependencies(ProjectB_swig_compilation ProjectA)
endif ()
我有一个项目“A”依赖于另一个项目“B”。
- ProjectB 安装一些 headers,例如 B1.h、B2.h。
- ProjectA 尝试使用 SWIG 创建 B1.h 和 B2.h 的 Python 包装器。
ProjectA 使用:
ExternalProject_Add(ProjectB ...)
将 ProjectB 编译并安装到二进制目录中。Swig_Add_Library(ProjectB ...)
创建 Python 包装器;此命令创建一个目标_ProjectB
.
我想确保 B1.h、B2.h 在 SWIG 运行 之前安装 ,因此我添加了以下命令:
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 的 include 目录是正确的:事实上,当我第二次 运行 make
时,这是有效的,因为 ProjectB 是通过第一次调用 make
.
我使用 CMake 3.13.5.
任何帮助都会很棒!
我找到了一个解决方法:在 Linux,我使用:add_dependencies(ProjectB_swig_compilation ProjectA)
然而,目标 ProjectB_swig_compilation
在 Windows 上不存在(我不明白为什么,因为我在 Linux 和 [=20= 上使用相同版本的 CMake ]).
最终,这是我在 CMakeLists.txt 中所做的:
if (WIN32 AND NOT MINGW)
add_dependencies(_ProjectB ProjectA)
else ()
add_dependencies(ProjectB_swig_compilation ProjectA)
endif ()