Mam projekt boost.python, który kompiluję używając cmake i make. Jest to część modułu python i chcę móc go zainstalować przy użyciu distutils. Postępowałem zgodnie z instrukcjami here, aby utworzyć plik CMakeLists.txt, który najpierw kompiluje bibliotekę współużytkowaną, a następnie konfiguruje plik setup.py, aby dokonać instalacji z instalacją modułu python. Jednak, mimo że wszystkie pliki Pythona są rozpoznawane przez distutils i przenoszone do katalogu budowania, biblioteka współużytkowana nie jest i naprawdę nie wiem dlaczego.python/C++ - Kompilowanie biblioteki współdzielonej z cmake i instalowanie z distutils
Moja struktura katalogów projektu:
- projekt
- build (katalog distutils python)
- doc (dokumentacja modułu) moduł
- (główny katalog moduł)
- rdzeń (dir dla projektu doładowania/biblioteki
- CMakeLists.txt - buduje bibliotek współdzielonych
- other_py_files (kilka katalogów czystych plików Python)
- rdzeń (dir dla projektu doładowania/biblioteki
- CMakeLists.txt
- setup.py.in
- setup.py (generowane przez cmake)
Mój plik 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}'},
)
My 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()
Myślałem distutils miała dodać rozszerzenia biblioteki współdzielone automatycznie do budowania katalogu, czy ja mam to gdzieś źle? (Biblioteka współdzielona to importowany moduł python zbudowany na C api (boost.python), więc powinien działać poprawnie?)
Oto link do modułu C/Python, który używa CMake - https://gitlab.com/ideasman42/blender-mathutils - distutils jest używany tylko do wyodrębniania prefiksu Python. * (chociaż istnieje również distutils setup.py, który nie jest używany do kompilacji CMake) * – ideasman42