Может кто-нибудь объяснить установку pybind11? - PullRequest
1 голос
/ 13 апреля 2020

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

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

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

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

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

1 Ответ

2 голосов
/ 13 апреля 2020

Не уверен, какие примеры вы упоминаете, но чтобы установить 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 вопроса даны ответы?

...