Cython

Meson bietet ab Version 0.59.0 native Unterstützung für Cython-Programme. Das bedeutet, Sie können es als normale Sprache einbinden und Ziele wie jede andere unterstützte Sprache erstellen.

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

Generell ist Cython am nützlichsten in Kombination mit der extension_module-Methode des Python-Moduls.

project('my project', 'cython')

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

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

Sie können Argumente, die vom cython CLI-Skript akzeptiert werden, mit dem Argument cython_args übergeben.

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

C++ Zwischenunterstützung

(Neu in 0.60.0)

Es wurde eine Option hinzugefügt, um dies zu steuern, genannt cython_language. Diese kann entweder 'c' oder 'cpp' sein.

Für Umsteiger von setuptools/distutils gibt es zwei Dinge zu beachten. Erstens ignoriert Meson Inline-Direktiven wie # distutils: language = c++. Zweitens erlaubt Meson Optionen nur auf granularer Ebene pro Ziel. Das bedeutet, wenn Sie Cython-Dateien mischen müssen, die zu C und zu C++ transpilert werden, benötigen Sie zwei Ziele.

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

Die Ergebnisse der Suche sind