一尘不染

如何覆盖默认情况下setup.py使用的编译器(gcc)标志?

python

我了解setup.py使用与构建python相同的CFLAGS。我有一个单独的C扩展名是segfaulting。我不需要构建它
-O2因为-O2正在优化一些值和代码,以使核心文件不足以解决问题。

我只需要修改setup.py,以便-O2不使用它。

我读过的distutils文件,尤其是distutils.ccompilerdistutils.unixcompiler,看看如何添加标记和库,包括,但不知道如何修改默认的gcc标志。

具体来说,这是针对Python 2.5.1上的旧产品,带有大量反向端口(Fedora
8,是的,我知道…)。不,我无法更改OS或python版本,并且在没有大问题的情况下也无法重新编译python。我只需要为一位环境唯一的客户建立一个C扩展。


阅读 135

收藏
2020-12-20

共1个答案

一尘不染

  • 前面加上CFLAGS="-O0"之前运行setup.py
    % CFLAGS="-O0" python ./setup.py
    

-O0将被附加到CFLAGS在编译,因此将覆盖以前的-O2设置。

  • 另一种方法是添加-O0extra_compile_argssetup.py

    moduleA = Extension('moduleA', .....,
        include_dirs = ['/usr/include', '/usr/local/include'], 
        extra_compile_args = ["-O0"], 
        )
    
  • 如果要删除所有默认标志,请使用:

    % OPT="" python ./setup.py
    
2020-12-20