Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ python/c++;-使用cmake编译共享库并使用distutils安装_C++_Python_Cmake_Boost Python_Distutils - Fatal编程技术网

C++ python/c++;-使用cmake编译共享库并使用distutils安装

C++ python/c++;-使用cmake编译共享库并使用distutils安装,c++,python,cmake,boost-python,distutils,C++,Python,Cmake,Boost Python,Distutils,我有一个boost.python项目,我使用cmake和make编译它。它是python模块的一部分,我希望能够使用distutils安装该模块。我按照说明创建了一个CMakeLists.txt文件,该文件首先编译共享库,然后设置setup.py,以便通过安装python模块进行安装。然而,尽管所有python文件都被distutils识别并移动到构建目录,但共享库却没有,我真的不知道为什么 我的项目目录结构: 计划 构建(python distutils目录) 文档(模块文档) 模块(主模

我有一个boost.python项目,我使用cmake和make编译它。它是python模块的一部分,我希望能够使用distutils安装该模块。我按照说明创建了一个CMakeLists.txt文件,该文件首先编译共享库,然后设置setup.py,以便通过安装python模块进行安装。然而,尽管所有python文件都被distutils识别并移动到构建目录,但共享库却没有,我真的不知道为什么

我的项目目录结构:

  • 计划
    • 构建(python distutils目录)
    • 文档(模块文档)
    • 模块(主模块目录)
      • 核心(boost项目/库的目录
        • CMakeLists.txt-构建共享库
      • 其他_py_文件(纯python文件的几个目录)
    • CMakeLists.txt
    • setup.py.in
    • setup.py(由cmake生成)
我的setup.py.in文件:

from distutils.core import setup
setup(
    name='module',
    version='${PACKAGE_VERSION}',
    packages=['module', 'module.core', 'module.other_py_files'],
    package_dir={'': '${CMAKE_CURRENT_SOURCE_DIR}'},
)
My CMakeLists.txt:

cmake_minimum_required (VERSION 2.6)
project (module)

add_subdirectory(module/core)

find_program(PYTHON "python")

if (PYTHON)
  set(SETUP_PY_IN "${CMAKE_CURRENT_SOURCE_DIR}/setup.py.in")
  set(SETUP_PY "${CMAKE_CURRENT_BINARY_DIR}/setup.py")
  set(DEPS "${CMAKE_CURRENT_SOURCE_DIR}/pyQCD/__init__.py")
  set(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/build/timestamp")

  configure_file(${SETUP_PY_IN} ${SETUP_PY})

  add_custom_command(OUTPUT ${OUTPUT}
    COMMAND ${PYTHON} ${SETUP_PY} build
    COMMAND ${CMAKE_COMMAND} -E touch ${OUTPUT}
    DEPENDS ${DEPS})

  add_custom_target(target ALL DEPENDS ${OUTPUT})

  install(CODE "execute_process(COMMAND ${PYTHON} ${SETUP_PY} install)")

endif()

我以为distutils应该自动添加共享库扩展来构建目录,还是我在什么地方弄错了?(共享库是一个基于C api(boost.python)构建的重要python模块,所以它应该可以正常工作?)

最后,我按照答案操作,并重写了build\u ext命令。由于我希望构建是跨平台的,而且共享库位于模块源代码树中,因此我导入模块共享库添加,并使用文件属性从setup.py获取共享库的路径。

是f
setup
替换
distutils.core.Extension
并使用cmake编译源代码。可以找到各种示例项目。在您使用的情况下,还有另一个简单的用法示例。

这里是一个指向使用cmake的C/Python模块的链接——distutils仅用于提取Python前缀。(虽然也有distutils setup.py,但它不用于CMake构建)请注意,在调用
命令${PYTHON}${setup\u py}build
时,应该指定
工作目录
。它应该指向
setup.py
文件所在的位置。如果未指定,可能会得到一个空包。