gpt4 book ai didi

Cython 预编译器决策

转载 作者:行者123 更新时间:2023-12-02 00:40:12 24 4
gpt4 key购买 nike

<分区>

我正在寻找一种在 cython 文件中添加预编译器逻辑的解决方案。

我用 C++ 为硬件设备 API 编写了一个 cython 包装器。这是一个 cython 项目,通常使用 MSVC 为 python 2.7 和 3.6 编译。整个包是用cython编写的,不需要外部c++或头文件。

最初,我编写这个软件是为了在 Windows 机器上使用,所以我使用了一些基本的 winapi 函数来帮助访问内核事件循环和 winapi 错误消息。它工作得很好,但我还想添加跨平台编译功能。这需要我完全替换几个关键函数才能使其在linux机器上运行。例如,硬件 API 甚至根据操作系统具有不同的事件处理函数。此外,需要替换 winapi 事件处理。

现在,我将整个项目编译成一个模块以简化导入。所有代码都驻留在编译成 hwmodule.pyd 文件的同一个 pyx 文件中。但是,为了实现跨平台编译的目标,我需要在安装时将几个小的 pyx 文件一起修补文件。这种解决方案并不优雅且难以维护。更不用说,这更难培训可能想要添加到项目中的其他人。

理想情况下,我能够将 cython 编写为 c 编译时标志,这些标志根据标志或变量进行解释和编译。 cython 中是否有任何解决方案可以实现我的目标?或者,是否有其他组织可以优雅且易于维护?

一些与 c 或 python 中的语法相似的合理语法示例(可能存在也可能不存在):

  • 使用#ifdef 或类似语句

    #ifdef __WINAPI
    def foo():
    print('bar win')
    #else
    def foo():
    print('bar linux')
    #endif
  • 使用类似 python 的 with block

    with ifdef('__WINAPI'):
    def foo():
    print('bar win')
  • 用类似 cython 的行结尾结束一个函数

    def foo() ifdef('__WINAPI'):
    print('bar win')

    def foo() ifndef('__WINAPI'):
    print('bar win')

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com