gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 21:04:28 25 4
gpt4 key购买 nike

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

我的项目目录结构:

  • 项目
    • 构建(python distutils 目录)
    • doc(模块文档)
    • module(主模块目录)
      • core(boost 项目/库的目录)
        • CMakeLists.txt - 构建共享库
      • other_py_files(纯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}'},
)

我的 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 模块,所以它应该可以正常工作?)

最佳答案

最后我按照答案 here并覆盖 build_ext 命令。因为我希望构建是跨平台的,并且由于共享库位于模块源代码树中,所以我导入模块共享库添加使用 file 属性从设置中获取共享库的路径.py.

关于c++ - python/c++ - 使用 cmake 编译共享库并使用 distutils 安装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18360245/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com