2015-03-24 23 views
6

EDYCJA: Pytanie jest nieco za długie. Oto moje prawdziwe pytanie: Jak skompilować i zainstalować pakiet python z setuptools (setup.py) wewnątrz CMake? Szczegóły mojego kodu pokazano poniżej (ale przy użyciu metody kompilacji źródłowej działa metoda ze źródłem).Zbuduj pakiet python za pomocą setup.py w CMake


Mam projekt, w którym muszę rozpowszechniać mój własny pakiet python. Zrobiłem skrypt setup.py, ale chciałbym zainstalować & zainstalować go z CMake.

Podążyłem za Using CMake with setup.py, ale działa tylko z jednym CMakeLists.txt obok folderu setup.py i python i bez wykonywania cmake z katalogu budowania.

Dzięki temu układ:

Project/ 
--build/ 
--lib/ 
----python/ 
------folder1/ 
------folder2/ 
------data/ 
------... 
------__init__.py 
----setup.py 
----CMakeLists.txt 
--CMakeLists.txt 

iz CMakeLists.txt:

cmake_minimum_required(VERSION 2.8.8 FATAL_ERROR) 
add_subdirectory(lib) 
(..) 

i lib/CMakeLists.txt:

find_program(PYTHON "python") 

if (PYTHON) 
    set(SETUP_PY_IN "${CMAKE_CURRENT_SOURCE_DIR}/setup.py") 
    set(SETUP_PY "${CMAKE_CURRENT_BINARY_DIR}/setup.py") 
    set(DEPS  "${CMAKE_CURRENT_SOURCE_DIR}/python/__init__.py") 
    set(OUTPUT  "${CMAKE_CURRENT_BINARY_DIR}/build") 

    configure_file(${SETUP_PY_IN} ${SETUP_PY}) 

    add_custom_command(OUTPUT ${OUTPUT} 
         COMMAND ${PYTHON} 
         ARGS setup.py build 
         DEPENDS ${DEPS}) 

    add_custom_target(target ALL DEPENDS ${OUTPUT}) 

    install(CODE "execute_process(COMMAND ${PYTHON} ${SETUP_PY} install)") 
endif() 

iz setup.py

from setuptools import setup, find_packages 

setup(name="python", 
    version="xx", 
    author="xx", 
    packages = find_packages(), 
    package_data = {'': ['*.txt']}, 
    description="Python lib for xx") 

Po uruchomieniu CMake z katalogu kompilacji, a następnie make, cel jest zbudowany, ale bez niczego. To tak, jakby nie znaleziono żadnych paczek. Instalacja zainstalować pakiet python bez plików .py ...

Dzięki

+0

Czy próbowałeś ustawić WORKING_DIRECTORY w add_custom_command? – cmorse

+0

Powinieneś używać wszystkich ścieżek względem bieżącego katalogu źródłowego. Umieść linię, taką jak 'DIR = os.path.dirname (os.path.realpath (__ plik __)), a następnie utwórz wszystkie pakiety względem tego katalogu, aby zbudować go ze źródła. –

Odpowiedz

0

setuptools nie wie o budowie obecnie source i dlatego nie znaleźliśmy żadnych plików źródłowych Pythona (bo ich nie kopiować do katalogu binarnego, tylko plik setup.py wydaje się tam istnieć). Aby to naprawić, musisz skopiować drzewo źródłowe Pythona do CMAKE_CURRENT_BINARY_DIR.