[英]python/c++ - Compiling shared library with cmake and installing with distutils
我有一個boost.python項目,我使用cmake和make編譯。 它是python模塊的一部分,我希望能夠使用distutils安裝該模塊。 我按照這里的說明創建了一個CMakeLists.txt文件,該文件首先編譯共享庫,然后設置setup.py,以便make install安裝python模塊。 但是,雖然所有python文件都被distutils識別並移動到構建目錄,但共享庫卻沒有,我真的不知道為什么。
我的項目目錄結構:
我的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模塊,所以它應該可以工作嗎?)
最后,我按照這里的答案並覆蓋了build_ext命令。 因為我希望構建是跨平台的,並且由於共享庫位於模塊源代碼樹內,因此我導入模塊共享庫add使用file屬性從setup.py獲取共享庫的路徑。
scikit-build是一個自定義的setup
實現,它取代了distutils.core.Extension
並使用cmake來編譯源代碼。 可在此處找到各種示例項目。 在你使用的情況下Pybind11 ,還有使用另一個簡單的例子在這里 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.