Как получить каталог установки модуля Python в CMake?

Я создал небольшой модуль 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, однако они не кажутся подходящими для автономного использования.

"это должен быть относительный путь к CMAKE_INSTALL_PREFIX" - не совсем ... почему вы так думаете?

zaufi 17.09.2018 17:38

@zaufi Предполагается, что он войдет в пакет, и make install будет вызываться без прав root

Erbureth says Reinstate Monica 17.09.2018 17:40
make install, выполняемый CPack, использует DESTDIR для установки файлов в "каталог изображений", который будет упакован позже ... так что не беспокойтесь.
zaufi 17.09.2018 17:48

то, что я вижу в вашем примере проекта, мне кажется вполне правильным

zaufi 17.09.2018 17:49

Собственно CPack вообще не вызывается, все построено на системе dpkg-buildpackage. Вызов его с помощью приведенного выше кода приводит к ошибке при копировании файла.

Erbureth says Reinstate Monica 17.09.2018 17:50

Тогда пришло время использовать CPack для сборки пакета%) Или хотя бы запустить make install из deb-helper w / DESTDIR%)

zaufi 17.09.2018 18:01

Я использую CPack для создания пакетов Deb / RPM / Nuget / Zip, просто имеющих конфигурацию CMake ... easy-peasy%) - вообще не нужно иметь дело с "родными" инструментами сборки пакетов

zaufi 17.09.2018 18:03

@zaufi Спасибо за толчок, DESTDIR был действительно правильным решением, и он используется debhelper по умолчанию, что я пропустил. Хотите дать ответ?

Erbureth says Reinstate Monica 18.09.2018 13:47

Я не знаю вашего случая (зачем вам debhelpers vs CPack ... я только предполагаю, что вы являетесь дистрибьютором%), поэтому, если вы считаете, что DESTDIR - это ответ на ваш вопрос, хорошо, пусть это будет ответ)

zaufi 18.09.2018 14:43
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
9
355
0

Другие вопросы по теме