python - /c++ - shared library Kompilieren mit cmake und Installation mit distutils

Habe ich einen Schub.python-Projekt, das ich kompilieren mit cmake und make. Es ist Teil eines python-Modul, und ich möchte in der Lage sein zu installieren das Modul mit distutils. Ich habe die Anweisungen befolgt hier zu erstellen CMakeLists.txt Datei, die kompiliert zuerst die shared library, dann stellt setup.py damit machen Sie die Installation mit installieren Sie das python-Modul. Jedoch, während alle python-Dateien erkannt werden distutils und zog in das build-Verzeichnis, das gemeinsame Bibliothek ist nicht, und ich weiß wirklich nicht, warum.

Mein Projekt-Verzeichnis-Struktur:

  • Projekt
    • bauen (python-distutils-Verzeichnis)
    • doc (Modul-Dokumentation)
    • - Modul (main-Modul-Verzeichnis)
      • core (dir für den boost-Projekt/Bibliothek
        • CMakeLists.txt - gemeinsame Bibliothek
      • other_py_files (mehrere Verzeichnisse von reinen python-Dateien)
    • CMakeLists.txt
    • setup.py.in
    • setup.py (erstellt von cmake)

Meinem 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}'},
)

Meine 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()

Dachte ich distutils sollte hinzufügen, shared-library-Erweiterungen automatisch zu bauen-Verzeichnis, oder habe ich das irgendwo falsch? (Die "shared library" ist eine Importierbare python-Modul baut auf der C-api (boost.python), also sollte es funktionieren oder?)

  • Hier ist ein link zu einem C/Python-Modul, das verwendet CMake - gitlab.com/ideasman42/blender-mathutils - distutils wird nur verwendet, um zu extrahieren Python-Präfix. (obwohl es ist eine distutils setup.py auch das ist nicht verwendet für das CMake -)
  • Beachten Sie, dass Sie sollten geben Sie den WORKING_DIRECTORY beim Aufruf COMMAND ${PYTHON} ${SETUP_PY} build. Es sollte darauf hinweisen, wo Ihre setup.py - Datei ist. Wenn es nicht angegeben ist, erhalten Sie möglicherweise ein leeres Paket.
InformationsquelleAutor orentago | 2013-08-21
Schreibe einen Kommentar