Python 包:如何测试编译器是否支持标志?

时间:2021-07-23 18:59:22

标签: python cython setuptools

假设我正在构建一个 python 包,它有一个需要编译的 Cython 扩展,并且这个包将使用 setuptools 安装。我通常可以通过对 Cython 的 build_ext 进行子类化并覆盖 build_extension 方法来添加额外的编译标志/参数 - 示例 setup.py:

from setuptools import setup
from setuptools.extension import Extension
from Cython.Distutils import build_ext

class build_ext_subclass(build_ext):
    def build_extensions(self):
        for ext in self.extensions:
            ext.extra_compile_args.append("-my-arg")
        build_ext.build_extensions(self)
...

setup(
    ...
    cmdclass = {'build_ext': build_ext_subclass}
)

如果编译器支持新的 -my-arg 参数,这可以正常工作。

但假设现在我想添加一些非标准的东西 - 例如,我想添加 -march=native-mcpu=native,具体取决于编译器支持哪一个。

我如何以编程方式确定编译器是否支持给定的参数?例如,如果脚本在 try/except 中多次调用 setup,或者如果在 try/except 块中多次调用 build_extension,这是好的做法还是会发生不好的事情?

0 个答案:

没有答案
相关问题