如何为 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 派生]
还要确保安装了 clang
和 ninja-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,或其他东西)