2.6 SWIG与自动构建系统的结合

SWIG是一个命令行工具,因而如此,它可以和任何支持调用外部工具/编译器的构建系统结合。多数情况下一班从Makefile中调用SWIG,但也可以从一些知名的IDE如Microsoft Visual Studio中调用。

如果你在项目中使用GNU的Autotools(Autoconf/Automake/Libtool)来配置SWIG,可以使用Autoonf的宏定义。主要的宏是ax_pkg_swig,从http://www.gnu.org/software/autoconf-archive/ax_pkg_swig.html#ax_pkg_swig可以了解详情。x_python_devel宏可用于生成Python扩展。查看Autoconf归档可以了解这些宏定义的更多信息。

有一些构建工具也正在提供对SWIG的支持,例如CMake,一个跨平台、开源的构建管理系统,就提供了对SWIG的内建支持。CMake可以检测SWIG的可执行程序、目标语言的运行时库。CMake知道如何在很多不同类型的操作系统上创建共享库和可加载模块。这允许你容易地进行跨平台SWIG开发。它还可以自定命令,生成驱动IDE或makefile工作的相关文件。所有这些都可以在一个跨平台的输入文件中完成。下面这个例子就是一个CMake的输入文件,用来从SWIG接口文件example.i创建Python语言的包装代码:

  1. # This is a CMake example for Python
  2. FIND_PACKAGE(SWIG REQUIRED)
  3. INCLUDE(${SWIG_USE_FILE})
  4. FIND_PACKAGE(PythonLibs)
  5. INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_PATH})
  6. INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
  7. SET(CMAKE_SWIG_FLAGS "")
  8. SET_SOURCE_FILES_PROPERTIES(example.i PROPERTIES CPLUSPLUS ON)
  9. SET_SOURCE_FILES_PROPERTIES(example.i PROPERTIES SWIG_FLAGS "-includeall")
  10. SWIG_ADD_MODULE(example python example.i example.cxx)
  11. SWIG_LINK_LIBRARIES(example ${PYTHON_LIBRARIES})

新版本中SWIG_ADD_MODULE已经过时,改用SWIG_ADD_LIBRARY

上面这个例子将会生成本机构建文件,如makefilesnmake filesVisual Studio工程文件,调用SWIG并编译生成的C++ 文件,最终生成example.so(UNIX)或_example.pyd[Windows]文件。其他的目标语言,生成Windows DLL文件而不是.pyd