我有一个boost.python项目,我使用cmake和make进行编译。它是python模块的一部分,我希望能够使用distutils来安装该模块。我按照指示here创建了一个CMakeLists.txt文件,首先编译共享库,然后设置setup.py,以便安装并安装python模块。然而,虽然所有的python文件都被distutils识别并移动到build目录,但共享库不是,我真的不知道为什么。python/C++ - 用cmake编译共享库并用distutils安装
我的项目目录结构:
- 项目
- 版本(蟒蛇的distutils目录)
- DOC(模块文档)
- 模块(主模块目录)
- 核心(DIR用于增强项目/库
- 的CMakeLists.txt - 建立的共享库
- other_py_files(纯Python文件几个目录)
- 核心(DIR用于增强项目/库
- 的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模块,所以它应该正常工作吗?)
这是一个使用CMake的C/Python模块的链接 - https://gitlab.com/ideasman42/blender-mathutils - distutils仅用于提取Python前缀。 *(虽然也有一个distutils setup.py,但它不用于CMake构建)* – ideasman42