2013-08-21 20 views
15

Ben cmake ve make kullanarak derlediğim bir boost.python projem var. Bu bir python modülünün bir parçası ve ben bu modülü distutils kullanarak kurabilmek istiyorum. Paylaşılan kitaplığı ilk olarak derleyen bir CMakeLists.txt dosyası oluşturmak için here yönergelerini takip ettim, daha sonra setup.py'yi kurar, böylece python modülünü yükleyerek kurulum yap. Bununla birlikte, tüm python dosyaları dağınıklıklar tarafından tanınır ve derleme dizinine taşınırken, paylaşılan kütüphane de öyle değildir ve gerçekten nedenini bilmiyorum.python/C++ - Paylaşılan kütüphaneyi cmake ile derlemek ve distutils ile yüklemek

Projem dizin yapısı:

  • proje
    • yapı (piton distutils dizin)
    • doc (modül belgeler)
    • modülü (ana modül dizin)
      • çekirdek (Dir boost projesi/kütüphanesi için
        • CMakeLists.txt - Paylaşılan Kitaplık
      • other_py_files (saf piton dosyalarını birkaç dizinleri)
    • CMakeLists.txt
    • setup.py.in
    • setup.py oluşturur (cmake tarafından oluşturulan)

Benim setup.py.in dosyası:

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

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

Ben distutils dizini oluşturmak için otomatik olarak paylaşılan kütüphane uzantıları eklemek sanıyordum, ya da ben yanlış yerde olduğunu var? (Paylaşılan kütüphane, C api (boost.python) üzerine kurulu bir içe aktarılabilir python modülüdür, bu yüzden doğru şekilde çalışmalıdır?)

+0

Burada CMake - https://gitlab.com/ideasman42/blender-mathutils kullanan bir C/Python modülüne bir bağlantı vardır - yalnızca Python önekini ayıklamak için kullanılır. * (Ayrıca, setup.py'nin bir distutils olmasına rağmen, bu CMake derlemesi için kullanılmaz) * – ideasman42

cevap

9

Sonunda here cevabını izledim ve build_ext komutunu geçersiz kıldım. Derlemenin çapraz platform olmasını istediğimden ve paylaşılan kütüphane modül kaynak ağacının içinde bulunduğundan, paylaşılan kütüphaneyi içe aktarıyorum, setup.py'den paylaşılan kütüphaneye giden yolu almak için dosya özelliğini kullanın.

0
,'un yerine geçen ve kaynakları derlemek için cmake kullanan özel bir setup uygulamasıdır. Çeşitli örnek projeler bulunabilir. Pybind11 kullanıyorsanız, here kullanımının başka bir basit örneği de vardır.
İlgili konular