pybind11学习 使用CMake构建系统并生成pyd文件

[TOC]

一 通过Visual Studio生成

在我之前的一篇文章pybind11学习 | VS2022下安装配置中,描述了如何通过配置VS2022实现pybind11项目构建和编译成Python拓展模块。

二 通过CMake生成

项目结构如下:

image-20221228134751509

其中pybind11文件夹为从github上克隆的pybind11源码。

CMakeLists.txt

1
2
3
4
5
cmake_minimum_required(VERSION 3.4)
project(example)

add_subdirectory(pybind11)
pybind11_add_module(example example.cpp)

pybind11_add_module是pybind11提供的一个CMake函数,用于简化pybind11项目的生成Python拓展模块的流程。pybind11_add_module语法如下:

1
2
pybind11_add_module(<name> [MODULE | SHARED] [EXCLUDE_FROM_ALL]
[NO_EXTRAS] [THIN_LTO] [OPT_SIZE] source1 [source2 ...])

在项目源文件目录下,打开windows终端,执行下面命令:

1
2
3
mkdir build
cd build
cmake ..

在cmake构建系统命令打印的结果中有下面一段:

1
2
-- Found PythonInterp: D:/anaconda3/envs/Mx_yolov3/python.exe (found suitable version "3.7.10", minimum required is "3.6")
-- Found PythonLibs: D:/anaconda3/envs/Mx_yolov3/libs/python37.lib

其中PythonInterpPythonLibs是pybind11自动寻找的,前提是已经在系统环境变量中添加了Python路径。生成的build文件夹目录如下:

image-20221228141009028

其中将example.sln通过VS打开,在VS中生成解决方案即可生成pyd文件。

image-20221228141329036

当然,我们也可以直接通过在终端中输入如下命令,直接生成pyd文件。

1
2
3
4
mkdir build
cd build
cmake ..
cmake --build .