Ich habe ein boost.python Projekt, das ich cmake mit kompilieren und machen. Es ist Teil eines Python-Moduls, und ich möchte in der Lage sein, dieses Modul mit Distutils zu installieren. Ich habe die Anweisungen befolgt here eine CMakeLists.txt-Datei zu erstellen, die zuerst die gemeinsame Bibliothek kompiliert, dann richtet setup.py so dass make mit installieren Sie die Python-Modul installieren. Während jedoch alle Python-Dateien von distutils erkannt und in das Build-Verzeichnis verschoben werden, ist die gemeinsame Bibliothek nicht, und ich weiß wirklich nicht warum.Python/C++ - Kompilieren gemeinsam genutzte Bibliothek mit cmake und Installation mit distutils
Mein Projekt-Verzeichnisstruktur:
- Projekt
- build (Python distutils Verzeichnis)
- doc (Modul-Dokumentation)
- Modul (Hauptmodulverzeichnis)
- Kern (dir für die Boost-Projekt/Bibliothek
- CMakeLists.txt - baut gemeinsam genutzte Bibliothek
- other_py_files (mehrere Verzeichnisse von reinen Python-Dateien)
- Kern (dir für die Boost-Projekt/Bibliothek
- CMakeLists.txt
- setup.py.in
- setup.py (erzeugt durch Cmake)
Meine setup.py.in Datei:
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}'},
)
Mein 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()
Ich dachte distutils sollte automatisch gemeinsam genutzte Bibliothek Erweiterungen hinzufügen Verzeichnis zu bauen, oder habe ich bekam, dass irgendwo falsch? (Die shared library ist ein importierbares Python-Modul, das auf dem CAPI (boost.python) aufbaut, sollte also richtig funktionieren?)
hier ein Link zu einem C/Python-Modul, das verwendet CMake - https://gitlab.com/ideasman42/blender-mathutils - distutils wird verwendet, nur Python Präfix zu extrahieren. * (obwohl es auch eine setutil.py-Datei gibt, die nicht für den CMake-Build verwendet wird) * – ideasman42