【问题标题】:`make install` with CMake + SWIG + Python使用 CMake + SWIG + Python 进行`make install`
【发布时间】:2013-01-24 21:38:11
【问题描述】:

我正在编写一个 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 .make后,成功生成_example.so。但是make install 不起作用,因为自动生成的Makefile 没有install 目标。我想知道如何在 Makefile 中添加 install 目标。我希望将_example.so 安装在每个系统上的site-packages 目录下。

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

【问题讨论】:

    标签: c++ python makefile cmake swig


    【解决方案1】:

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

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

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

    【讨论】:

    • 非常感谢。我将添加一个答案以显示整个命令。
    • 想知道如何动态生成该变量名......尽管我的预期是,${SWIG_MODULE_${PROJECT_NAME}_REAL_NAME} 似乎工作!
    【解决方案2】:
    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})
    

    【讨论】:

    • 如果 CMAKE_INSTALL_PREFIX 设置为本地目录,这将如何工作? PYTHON_SITE_PACKAGES 将指向系统文件夹并且不使用前缀...
    • 我在 libftdi python CMakeLists.txt 文件中找到了答案。我对它的理解还不够好,无法回复任何更新,但对于任何也有兴趣的人,请查看developer.intra2net.com/git/?p=libftdi;a=blob;f=python/…
    • 这种行为在 Python 世界中是预期的。该库被安装到对 python 的天真调用将使用的环境中。这可以让你安装到当前激活的 virtualenv 或者你有什么。
    猜你喜欢
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    • 2018-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多