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引数を使用して、cythonCLIスクリプトで受け入れられる引数を渡すことができます

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

C++中間サポート

(0.60.0の新機能)

これを制御するためのオプション、cython_languageが追加されました。これは'c'または'cpp'のいずれかです。

setuptools/distutilsに移行したユーザーには、2つの変更点があります。まず、mesonはインラインディレクティブ# distutils: language = c++を無視します。 2つ目に、Mesonではターゲットごとにオプションを許可するだけです。つまり、CとC++に変換するcythonファイルを混在させる必要がある場合は、2つのターゲットが必要です

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,
)

検索結果は次のとおりです