有人可以解释一下 pybind11 安装吗?

And*_*kel 6 c++ python cmake pybind11

pybind11 文档总体来说不错,但它的一个方面不是解释安装过程以及使用 cmake 获取和运行示例的过程。

我已经设法弄清楚如何获取和构建示例。但这会带来更多问题。几乎所有示例都依赖于将 pybind11 存储库下载到示例文件夹中,并在 cmake 运行中包含存储库的根文件夹(根文件夹包含 cmakelists.txt 文件)。该存储库的内容与使用 pip 或 conda 安装 pybind11 时添加到 python 环境的内容有很多共同点。但文件夹组织完全不同。

所以我很好奇:

  • 为什么有区别?
  • 有没有一种方法可以使用环境安装中的内容,这样您就不必下载存储库来使用 cmake 构建示例?
  • 如果做不到这一点,将 pybind11 存储库放在一个公共位置的最佳方法是什么,这样就不必为了构建示例或为自己的代码提供重要的附加 cmake 功能而将其复制到各处?

一般来说,我对不理解这些事情的“如何运作”方面感到非常不舒服,所以这对我真的很有帮助。

Pta*_*666 3

不确定您提到了哪些示例,但要在系统中安装 pybind11 并在不同的项目中使用它,只需遵循安装基于 CMake 的包的标准过程即可

mkdir build
cd build
cmake ../  # optionally you can specify -DPYBIND11_PYTHON_VERSION=<your python version>
make
sudo make install
Run Code Online (Sandbox Code Playgroud)

然后在您的其他项目之一中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)
Run Code Online (Sandbox Code Playgroud)

有关更多 CMake 命令,请参阅pybind11Config.cmake

然后,如果您不想将其安装在系统中,则可以将pybind11repo 嵌入项目树中,add_subdirectory而不是find_package. 所有提供的功能都是相同的。该包设计精良,它会检测它是否用作主项目以及是否定义了安装目标。

所以我想你的最后两个问题已经得到解答了吗?