有条件地使用 Boost Python 添加模块

Conditionally add modules with Boost Python

本文关键字:Python 添加 模块 Boost 有条件      更新时间:2023-10-16

我成功地使用Boost Python构建了一系列Python库。这些库是有条件地构建的,具体取决于用户在构建时指定的设置(通过 CMake(。

现在我想做的是将它们全部合并到一个库中,该库仅在需要时包含一系列模块(每个旧库一个(。

例如,如果之前我有:

A.so # Always built
B.so # Compiled if B was set
C.so # Compiled if C was set

现在我想拥有:

MyLib.so # Always built
---
import MyLib
MyLib.A # always works
MyLib.B # works only if MyLib was compiled with B set
MyLib.C # works only if MyLib was compiled with C set

我已经知道如何使用 Boost Python 创建命名空间(通过 class_(,但我不确定如何设置项目以便最终结果成为可能。

使用 CMake,我可以有条件地添加要编译的文件,但我不知道如何在 C++ 中定义 MyLib 模块,以便我可以在单独的文件中向其添加部分。

现在,我在导出函数中添加了一些ifdefs,这些函数根据在 CMake 中创建的定义限制导出。

这还不错,尽管我更愿意保持代码干净,但现在这是我唯一的解决方案。