Cython

Meson 从 0.59.0 版本开始,原生支持 cython 程序。这意味着您可以像其他支持的语言一样,将其作为普通语言包含并创建目标

lib = static_library(
    'foo',
    'foo.pyx',
)

通常情况下,Cython 与 python 模块的 extension_module 方法结合使用时最有用

project('my project', 'cython')

py = import('python').find_installation()
dep_py = py.dependency()

py.extension_module(
    'foo',
    'foo.pyx',
    dependencies : dep_py,
)

您可以使用 cython_args 参数传递 cython CLI 脚本接受的参数

py.extension_module(
    'foo-bounds'
    'foo.pyx',
    dependencies : dep_py,
    cython_args : ['-Xboundscheck=False'],
)

C++ 中间支持

(0.60.0 中新增)

已添加一个名为 cython_language 的选项来控制此选项。它可以是 'c''cpp'

对于来自 setuptools/distutils 的用户,他们会发现两点。首先,meson 会忽略 # distutils: language = c++ 内联指令。其次,Meson 只允许在每个目标粒度上使用选项。这意味着如果需要混合编译为 C 和 C++ 的 cython 文件,则需要两个目标

project('my project', 'cython')

cython_cpp_lib = static_library(
    'helper_lib',
    'foo_cpp.pyx',  # will be transpiled to C++
    override_options : ['cython_language=cpp'],
)

py.extension_module(
    'foo',
    'foo.pyx',  # will be transpiled to C
    link_with : [cython_cpp_lib],
    dependencies : dep_py,
)

搜索结果是