擅长:python、mysql、java
<p>已经5年了,但我找到了一个比我的“CC”包装更喜欢的解决方案。在</p>
<p>“build_ext”命令创建一个自编译程序实例。这个编译器.编译()方法获取要编译的所有源文件的列表。基类执行一些设置,然后为具体的编译器子类提供一个compiler.\u compile()钩子,以实现实际的逐文件编译步骤。在</p>
<p>我觉得这是足够稳定的,我可以拦截代码在那一点。在</p>
<p>我从distutils.command.build\u扩展.build_ext哪一个调整自编译程序.\u编译以使用附加到实例的一次性函数包装绑定类方法:</p>
<pre><code>class build_ext_subclass(build_ext):
def build_extensions(self):
original__compile = self.compiler._compile
def new__compile(obj, src, ext, cc_args, extra_postargs, pp_opts):
if src != "src/popcount_SSSE3.c":
extra_postargs = [s for s in extra_postargs if s != "-mssse3"]
return original__compile(obj, src, ext, cc_args, extra_postargs, pp_opts)
self.compiler._compile = new__compile
try:
build_ext.build_extensions(self)
finally:
del self.compiler._compile
</code></pre>
<p>然后我告诉setup()使用这个命令类:</p>
^{pr2}$