python/c++ Compiler la bibliothèque partagée avec cmake et de l'installation avec des distutils

J'ai un coup de boost.projet de python que j'ai compiler à l'aide de cmake et de faire. Il fait partie d'un module python, et je veux être en mesure d'installer ce module à l'aide de distutils. J'ai suivi les instructions ici pour créer un CMakeLists.txt fichier qui aborde d'abord la bibliothèque partagée, puis setup.py alors que faire de l'installer avec installer le module python. Cependant, alors que tous les fichiers python sont reconnus par distutils et déplacé vers le répertoire de construction, la bibliothèque partagée n'est-ce pas, et je ne sais vraiment pas pourquoi.

Mon projet de structure de répertoire:

  • projet
    • construire (python distutils répertoire)
    • doc (documentation du module)
    • module (module principal répertoire)
      • de base (dir pour le coup de pouce de projet/bibliothèque
        • CMakeLists.txt - construit la bibliothèque partagée
      • other_py_files (plusieurs répertoires de pure fichiers python)
    • CMakeLists.txt
    • de l'installation.py.dans
    • setup.py (généré par cmake)

Mon installation.py.dans le fichier:

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

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

J'ai pensé distutils était censé ajouter de la bibliothèque partagée extensions automatiquement au répertoire de construction, ou j'ai obtenu que mal quelque part? (La bibliothèque partagée est une importables module python construit sur l'api C (boost.python), donc ça devrait marcher non?)

  • Voici un lien vers un C/module Python qui utilise CMake - gitlab.com/ideasman42/blender-mathutils - distutils est juste utilisé pour extraire Python préfixe. (bien qu'il y est un distutils setup.py aussi, ce n'est pas utilisée pour la compilation CMake)
  • Notez que vous devez spécifier le WORKING_DIRECTORY lorsque vous appelez COMMAND ${PYTHON} ${SETUP_PY} build. Il devrait pointer vers l'endroit où votre setup.py fichier est. Si il n'est pas spécifié, vous pouvez obtenir un paquet vide.
InformationsquelleAutor orentago | 2013-08-21