9

我正在编写一个 C++ 库,它可以在 Mac 和 Linux 上从 C++ 和 Python 中使用。所以我决定在我的项目中使用 CMake 和 SWIG。

正如 SWIG 2.0 文档中所述,SWIG 和 CMake 的组合在我的 Mac 上也可以正常工作。 http://www.swig.org/Doc2.0/SWIGDocumentation.html#Introduction_build_system

但我有一个关于make install.

输入cmake .and后make_example.so成功生成。但make install不起作用,因为自动生成的 Makefile 没有install目标。我想知道如何install在 Makefile 中添加目标。我想_example.so安装在site-packages每个系统的目录下。

如果有人能告诉我如何修改上面链接中编写的 CMake 示例,我将不胜感激。

4

2 回答 2

10
find_package(SWIG REQUIRED)
find_package(PythonLibs REQUIRED)

include(${SWIG_USE_FILE})
set(CMAKE_SWIG_FLAGS "")
include_directories(${PYTHON_INCLUDE_DIRS})

set_source_files_properties(target.i PROPERTIES CPLUSPLUS ON)
set_source_files_properties(target.i PROPERTIES SWIG_FLAGS "-includeall")
swig_add_module(target python target.i ${SOURCES})
swig_link_libraries(target ${PYTHON_LIBRARIES})

execute_process(COMMAND python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()" OUTPUT_VARIABLE PYTHON_SITE_PACKAGES OUTPUT_STRIP_TRAILING_WHITESPACE)
install(TARGETS _target DESTINATION ${PYTHON_SITE_PACKAGES})
install(FILES ${CMAKE_BINARY_DIR}/src/target.py DESTINATION ${PYTHON_SITE_PACKAGES})
于 2013-02-10T10:14:09.907 回答
8

CMake 接口make install是 CMake 命令install()。在您的示例中,您可以添加如下安装规则:

install(
  TARGETS ${SWIG_MODULE_example_REAL_NAME} 
  # ... add other arguments to install() as necessary
)

一旦 CMakeList 中有任何install()命令,CMake 将生成一个install可调用的目标作为make install.

于 2013-02-09T12:39:46.640 回答