繁体   English   中英

删除setup.py中的所有默认编译器参数

[英]Remove all default compiler arguments in setup.py

我正在构建一个带有distutils的扩展模块,遗憾的是,它使用一堆我不想要的参数调用编译器。 具体来说,它使用/usr/lib64/python2.7/config/Makefile中定义的CFLAGS变量,该变量也由

>>> from distutils import sysconfig
>>> print(sysconfig.get_config_vars()['CFLAGS'])
-fno-strict-aliasing -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4  -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv   -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4  -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv

给出这个问题的答案不起作用; 从命令行设置CFLAGS=""会导致调用gcc

-DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv

好像OPT在makefile中是空的,但实际上设置OPT=""没有效果。 有没有办法告诉distutils不添加这些标志? 我知道我可以通过添加自己的标志来覆盖其中的大多数(手动取消定义宏 - 如-DNDEBUG-UNDEBUG并用-O0覆盖-O2 ),但这真的很难看,肯定应该有更好的方法。

我遇到了同样的问题,即设置OPTCFLAGS没有任何效果。 似乎其他构建也有这个问题,它是一个Distutils错误

这绝不是一个令人满意的解决方案,并且不比你建议的那么难看,但我最终能够通过修改python/distutils/sysconfig.py来禁用这些标志并获得我的扩展。 我在customize_compiler函数中插入了几行(从我的安装的第206行开始)

    if 'LDFLAGS' in os.environ:
        ldshared = ldshared + ' ' + os.environ['LDFLAGS']
    if 'CFLAGS' in os.environ:
        cflags = opt + ' ' + os.environ['CFLAGS']
        ldshared = ldshared + ' ' + os.environ['CFLAGS']

    if 'LDFLAGS' in os.environ:
        ldshared = ldshared + ' ' + os.environ['LDFLAGS']
    if 'OPT' in os.environ:
        opt = os.environ['OPT']
    if 'CFLAGS' in os.environ:
        cflags = opt + ' ' + os.environ['CFLAGS']
        ldshared = ldshared + ' ' + os.environ['CFLAGS']

这将至少允许您使用自己的OPT参数完全覆盖默认的OPT参数。 很可能有必要在那些没有引起问题的论点中加回。

例如,对于我自己编译的项目

$OPT="-DDYNAMIC_ANNOTATIONS_ENABLED=1 -DNDEBUG -g -fwrapv -O3" CFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4" python setup.py build_ext --inplace

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM