CMake C++ 库包含工具链名称

CMake C++ library includes toolchain name

我正在使用 pybind11 和 scikit-build 在 C++ 中构建一个 Python 扩展。我基于 https://github.com/pybind/scikit_build_example/blob/master/setup.py.

中提供的示例

我的 CMakelists 归结为:

pybind11_add_module(_mylib MODULE ${SOURCE_FILES})
install(TARGETS _mylib DESTINATION .)

setup.py:

setup(
    name="mylib",
    version="0.0",
    packages=['mylib'],
    cmake_install_dir="mylib",
)

在 python 方面我有 mylib/__init__.py:

from _mylib import *

这一切都很好。我可以使用 pip 安装包并导入 mylib 通过代理成功导入库。这个代理是必要的,因为我在库中做的不仅仅是 C++ 库。

除了有一个问题。构建库的名称包括工具链。对于我的系统,它看起来像 _mylib.cpython-38-x86_64-linux-gnu.so,而我期望 _mylib.so__init__.py 找不到库,除非我在 python 端手动重命名它或更改 so 名称。

我该如何解决这个问题?

结论:正如Alex所说,这部分名字是必须的。参见 https://www.python.org/dev/peps/pep-3149/。如果您导入 _mylib.

,Python 会自动计算出它可以使用 _mylib.cpython-38-x86_64-linux-gnu.so