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
Czy próbowałeś ustawić WORKING_DIRECTORY w add_custom_command? – cmorse
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. –