我正在构建一个独立于平台的cython项目,我希望根据所使用的编译器传递编译器args.我可以根据平台猜测编译器,或者假设它与Python使用的编译器相同,但不能保证匹配.通常我将cmdclassarg 注入到setuptool的setup方法中并包装install或build_ext命令来检查内部状态.但在这种情况下,我必须在到达包装器之前对扩展模块进行cython化.
在对扩展模块进行cython化之前,有没有办法确定setup.py中的编译器?
在 cython 论坛上发帖并在 distutils 中搜索相关问题后,我发现这篇文章展示了如何将编译器参数移动到 build_ext 分配中。如果我随后从扩展类中删除所有编译器参数,我现在可以按照我的预期在命令类中延迟分配它们。我也可以获得install和egg_info命令类来调用我的新版本的 build_ext。
from setuptools.command.build_ext import build_ext
BUILD_ARGS = defaultdict(lambda: ['-O3', '-g0'])
for compiler, args in [
('msvc', ['/EHsc', '/DHUNSPELL_STATIC']),
('gcc', ['-O3', '-g0'])]:
BUILD_ARGS[compiler] = args
class build_ext_compiler_check(build_ext):
def build_extensions(self):
compiler = self.compiler.compiler_type
args = BUILD_ARGS[compiler]
for ext in self.extensions:
ext.extra_compile_args = args
build_ext.build_extensions(self)
...
setup(
...
cmdclass={ 'build_ext': build_ext_compiler_check })
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1038 次 |
| 最近记录: |