我有一个项目"这取决于另一个项目"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)。
if (WIN32 AND NOT MINGW)
add_dependencies(_ProjectB ProjectA)
else ()
add_dependencies(ProjectB_swig_compilation ProjectA)
endif ()