【问题标题】:Can someone explain the pybind11 install?有人可以解释 pybind11 安装吗?
【发布时间】:2020-04-13 20:34:27
【问题描述】:

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

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

所以我很好奇:

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

总的来说,我真的很不舒服,不了解这些事情的“这是如何工作的”方面,所以这对我很有帮助。

【问题讨论】:

    标签: python c++ cmake pybind11


    【解决方案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 repo,使用add_subdirectory而不是find_package。所有提供的功能都是相同的。该包设计良好,它会检测它是否用作主项目以及是否定义了 INSTALL 目标。

    所以我猜你的最后两个问题已经回答了吗?

    【讨论】:

    • 效果很好。谢谢你。一个相关的问题 - 你知道我可以在任何地方找到一个为 pybind11 设置合理的普通启动文件(不是 cmake 生成的)吗? Cmake 不是我最喜欢的工具,而且我知道如何写出源 makefile。
    • 嗯,纯 Makefile,不知道。大多数开放项目​​现在都使用 CMake。该语言并不完美,每个 CMake 版本都有一些黑客攻击,但它仍然是最流行的构建工具。
    猜你喜欢
    • 2012-05-29
    • 2010-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    • 2013-12-03
    • 1970-01-01
    相关资源
    最近更新 更多