Я создал небольшой модуль Python с использованием C++ и Boost, построенный с помощью CMake. Теперь мне нужно установить его в стандартный каталог модулей Python, однако это должен быть путь внутри CMAKE_INSTALL_PREFIX
, чтобы его можно было упаковать со стандартной системой упаковки Debian.
Теперь у меня есть это, где последняя строка явно неверна, поскольку это абсолютный путь к системному каталогу.
cmake_minimum_required(VERSION 3.12)
project(foo)
# Not Shown: Extract ${PYTHON_VERSION} from interpreter
find_package(Python ${PYTHON_VERSION} REQUIRED COMPONENTS Interpreter Development)
find_package(Boost 1.55.0 REQUIRED COMPONENTS system python${Python_VERSION_MAJOR}${Python_VERSION_MINOR})
Python_add_library(foo MODULE
src/foo.cc src/python_interface.cc
)
set_target_properties(foo PROPERTIES PREFIX "")
target_link_libraries(foo
PUBLIC
Boost::python${Python_VERSION_MAJOR}${Python_VERSION_MINOR}
)
# This is wrong
install(TARGETS foo DESTINATION ${Python_SITEARCH}/foo)
Я также посмотрел на Python distutils
и setuptools
, однако они не кажутся подходящими для автономного использования.
@zaufi Предполагается, что он войдет в пакет, и make install
будет вызываться без прав root
make install
, выполняемый CPack, использует DESTDIR
для установки файлов в "каталог изображений", который будет упакован позже ... так что не беспокойтесь.
то, что я вижу в вашем примере проекта, мне кажется вполне правильным
Собственно CPack вообще не вызывается, все построено на системе dpkg-buildpackage
. Вызов его с помощью приведенного выше кода приводит к ошибке при копировании файла.
Тогда пришло время использовать CPack для сборки пакета%) Или хотя бы запустить make install
из deb-helper w / DESTDIR
%)
Я использую CPack для создания пакетов Deb / RPM / Nuget / Zip, просто имеющих конфигурацию CMake ... easy-peasy%) - вообще не нужно иметь дело с "родными" инструментами сборки пакетов
@zaufi Спасибо за толчок, DESTDIR был действительно правильным решением, и он используется debhelper
по умолчанию, что я пропустил. Хотите дать ответ?
Я не знаю вашего случая (зачем вам debhelpers vs CPack ... я только предполагаю, что вы являетесь дистрибьютором%), поэтому, если вы считаете, что DESTDIR
- это ответ на ваш вопрос, хорошо, пусть это будет ответ)
"это должен быть относительный путь к CMAKE_INSTALL_PREFIX" - не совсем ... почему вы так думаете?