Cython

從 0.59.0 版本開始,Meson 為 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,
)

搜尋結果為