假设我正在构建一个 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
,这是好的做法还是会发生不好的事情?>