【发布时间】:2022-12-06 00:05:03
【问题描述】:
我正在开发一个使用 brew 安装依赖项的项目。
我们需要 pybind11 来构建我们的 python 模块。
当我 ll 可用文件时,我得到:
@DOCKER:include ^_^$ ll pybind11/
total 548K
-rw-rw-r-- 1 builder docker 24K Nov 8 10:32 attr.h
-rw-rw-r-- 1 builder docker 7.0K Nov 8 10:32 buffer_info.h
-rw-rw-r-- 1 builder docker 64K Nov 8 10:32 cast.h
-rw-rw-r-- 1 builder docker 8.7K Nov 8 10:32 chrono.h
-rw-rw-r-- 1 builder docker 120 Nov 8 10:32 common.h
-rw-rw-r-- 1 builder docker 2.1K Nov 8 10:32 complex.h
drwxrwxr-x 2 builder docker 4.0K Nov 8 10:32 detail
-rw-rw-r-- 1 builder docker 31K Nov 8 10:32 eigen.h
-rw-rw-r-- 1 builder docker 12K Nov 8 10:32 embed.h
-rw-rw-r-- 1 builder docker 5.5K Nov 8 10:32 eval.h
-rw-rw-r-- 1 builder docker 4.7K Nov 8 10:32 functional.h
-rw-rw-r-- 1 builder docker 6.7K Nov 8 10:32 gil.h
-rw-rw-r-- 1 builder docker 8.7K Nov 8 10:32 iostream.h
-rw-rw-r-- 1 builder docker 77K Nov 8 10:32 numpy.h
-rw-rw-r-- 1 builder docker 9.6K Nov 8 10:32 operators.h
-rw-rw-r-- 1 builder docker 2.2K Nov 8 10:32 options.h
-rw-rw-r-- 1 builder docker 123K Nov 8 10:32 pybind11.h
-rw-rw-r-- 1 builder docker 80K Nov 8 10:32 pytypes.h
drwxrwxr-x 2 builder docker 4.0K Nov 8 10:32 stl
-rw-rw-r-- 1 builder docker 27K Nov 8 10:32 stl_bind.h
-rw-rw-r-- 1 builder docker 15K Nov 8 10:32 stl.h
这够了吗?
当我尝试将 pybind11 添加到我的 CMakeLists.txt 时:
include_directories("/cache/venv/include/pybind11")
#I tried this too: add_subdirectory("/cache/venv/include/pybind11" ".")
pybind11_add_module(pystuff binding.cpp)
我总是得到同样的错误:
CMake Error at src/applications/pycore/CMakeLists.txt:60 (pybind11_add_module):
Unknown CMake command "pybind11_add_module".
我错过了什么?
我尝试使用 pip 安装 pybind11,但 cmake 仍然找不到该命令。
(我使用的是基于 ubuntu 22 的 docker 镜像)
我有一个非常简单的代码来测试这个:
#include <pybind11/pybind11.h>
namespace py = pybind11;
int return42(){ return 42;}
PYBIND11_MODULE(pystuff, m) {
m.def("return42", &return42, "A function that returns 42");
}
如果我不在 cmake 上添加 pybind11_add_module(pystuff binding.cpp) 行,项目会编译,但我猜是 pybind11需要添加模块以实际工作
【问题讨论】:
-
我会尝试使用 CMake 的
FetchContent,比如 here。但这是一个古老的答案。我更愿意将最后一段从FetchContent_GetProperties更改为FetchContent_MakeAvailable。这些行将在构建项目之前下载pybind11依赖项。但是请注意,您仍然需要target_include_directories(<your_exe_or_lib> $pybind11_INCLUDE_DIRS)和target_link_libraries(<your_exe_or_lib> $pybind11之类的东西。 -
这是我的问题,它是一个与我的环境相关的 XY 问题