Может кто-нибудь объяснить установку pybind11?

Документация pybind11 в целом хороша, но одна область, в которой это не так, - это объяснение процесса установки и процесса получения и запуска примеров с помощью cmake.

Мне удалось придумать, как получить и построить примеры. Но это приводит к большему количеству вопросов. Почти все примеры рассчитаны на загрузку репозитория pybind11 в папку примеров и включение корневой папки репо при запуске cmake (корневая папка содержит файл cmakelists.txt). Содержимое этого репо имеет много общего с содержимым, которое добавляется в среду Python при установке pybind11 с помощью pip или conda. Но организация папок совершенно другая.

Так что мне любопытно:

  • В чем разница?
  • Есть ли способ использовать содержимое в установке среды таким образом, чтобы вам также не приходилось загружать репозиторий, чтобы создавать примеры с помощью cmake?
  • В противном случае, как лучше всего разместить репозиторий pybind11 в общем месте, чтобы его не нужно было копировать повсюду для создания примеров или для обеспечения важной дополнительной функциональности cmake для собственного кода ?

Мне очень неудобно вообще не понимать аспект «как это работает» в таких вещах, так что это действительно поможет мне.


person Andrew Voelkel    schedule 13.04.2020    source источник


Ответы (1)


Не уверен, какие примеры вы упомянули, но чтобы установить pybind11 в вашей системе и использовать его в разных проектах, просто следуйте стандартной процедуре установки пакетов на основе CMake.

mkdir build
cd build
cmake ../  # optionally you can specify -DPYBIND11_PYTHON_VERSION=<your python version>
make
sudo make install

Затем в одном из ваших проектов CMakeLists.txt вы можете использовать его, например. нравится:

find_package(pybind11 CONFIG REQUIRED)
message(STATUS "Found pybind11 v${pybind11_VERSION}: ${pybind11_INCLUDE_DIRS}")
add_library(<name of your lib> MODULE <your sources>)
target_link_libraries(mylib pybind11::module)

Дополнительные команды CMake см. В pybind11Config.cmake. .

Затем, если вы не хотите устанавливать его в своей системе, вы можете просто встроить репозиторий pybind11 в дерево проекта с помощью add_subdirectory вместо find_package. Все предлагаемые функции будут такими же. Пакет хорошо спроектирован и определяет, используется ли он в качестве главного проекта или нет, а также определяет цели INSTALL или нет.

Итак, я думаю, что даны ответы на ваши последние 2 вопроса?

person pptaszni    schedule 13.04.2020
comment
Это прекрасно работает. Спасибо. Связанный вопрос - знаете ли вы, где я мог бы найти простой стартовый make-файл (не сгенерированный cmake), который достаточно хорошо настроен для pybind11? Cmake - не мой любимый инструмент, и я знаю, как писать из исходных make-файлов. - person Andrew Voelkel; 14.04.2020
comment
Ммм, простой Makefile, понятия не имею. Большинство открытых проектов сейчас используют CMake. Язык не идеален, и в каждой версии CMake есть некоторые взломы, но он по-прежнему остается самым (или одним из) популярных инструментов сборки. - person pptaszni; 14.04.2020