如何为 pybind11 正确构建活页夹

Posted

技术标签:

【中文标题】如何为 pybind11 正确构建活页夹【英文标题】:How to properly build binder for pybind11 【发布时间】:2020-01-04 02:59:07 【问题描述】:

我是 binder 的新用户,我关注了 the installation steps,但是当我运行最后一个以下命令时:

cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_EH=1 -DLLVM_ENABLE_RTTI=ON .. && ninja

它说: CMake Error: The source directory "/Users/cuinjune/prefix" does not appear to contain CMakeLists.txt.

我错过了什么吗?我按照步骤两次,但仍然停留在最后一步。 任何指导将不胜感激。

【问题讨论】:

How to properly build binder for pybind11? 根据您链接的安装步骤,pybind11 不是构建binder 的要求吗? @SaurabhPBhandari 是的,这是一项要求。我已经安装了。 你能用日志更新问题吗? 你能按照说明成功构建吗? 【参考方案1】:

我无法使用此 installation steps 成功构建 binder。我也收到以下错误:

CMake 错误:源目录“$HOME/prefix”似乎没有 包含 CMakeLists.txt。指定 --help 使用,或按帮助 CMake GUI 上的按钮。

但是,安装步骤似乎已经过时。你可以找到最新的安装步骤here和binder存储库here。

如docs 中所述,您可以克隆binder 存储库并运行build-and-run-tests.py 进行默认安装。


在运行build-and-run-tests.py 时,如果您处于Building tool: binder... 这一步,则似乎该过程将永远持续下去,因为没有立即可用的详细输出。

相反,您可以终止构建并在终端中手动执行命令以获得详细输出。

例如,考虑以下输出:

Building tool: binder...
cd /home/test/binder/build/llvm-6.0.1/build_6.0.1.linux.ubuntu.release && cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_EH=1 -DLLVM_ENABLE_RTTI=ON  .. && ninja bin/binder clang -j1

您可以终止 (Ctrl+C) 构建并在终端中按顺序手动运行命令(再次运行 build-and-run-tests.py 以继续手动执行命令后的构建),

cd /home/test/binder/build/llvm-6.0.1/build_6.0.1.linux.ubuntu.release
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_EH=1 -DLLVM_ENABLE_RTTI=ON  ..
ninja bin/binder clang -j1

此外,在最后一个命令中,您可以增加并行执行的作业数量。

来自man page,

-j N

并行运行 N 个作业 [默认=从可用 CPU 派生]


还要确保安装了 clangninja-build 等先决条件,如本期 here 中所述

【讨论】:

我按照最新的安装步骤操作,但由于同样的问题而失败。当我运行 build-and-run-tests.py 脚本时,它似乎冻结了,所以构建需要很长时间。 @ZackLee,它在哪一步冻结?基于这个issue,它也可能需要几个小时 @ZackLee,我能够通过运行 build-and-run-tests.py 脚本成功构建 binder虽然花费了很多时间),请注意测试可能会失败,但正如作者here回复this所提到的,应该没问题 构建它花了多长时间?您是否更改了 -j 标志的设置? @ZackLee,花了将近一天的时间才完成,但是我使用的是虚拟机,我确实尝试更改 -j 标志(它确实有帮助,但如果 N > 2 并且我需要,有时构建会失败重新启动构建,但是它从它离开的地方恢复),我建议您手动执行命令,因为它指示有多少对象需要详细构建,这至少是进度的指标,还请注意您需要运行手动执行命令后脚本一次,以便完成剩余步骤

以上是关于如何为 pybind11 正确构建活页夹的主要内容,如果未能解决你的问题,请参考以下文章

Pybind11:为啥来自 Python 的异步调用不能在 C++ 中正确执行回调?

如何为正确的构建系统自动选择 NSColor 和 UIColor? (使用#define,或其他东西)

pybind11 解释器使用捆绑的 python 可执行文件

如何为 IE11 转换不当行为正确应用 css hack

Hibernate - 如何为整数类型提供正确的映射?

Spring @ContextConfiguration 如何为xml放置正确的位置