[英]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
),但这真的很难看,肯定应该有更好的方法。
我遇到了同样的问题,即设置OPT
和CFLAGS
没有任何效果。 似乎其他构建也有这个问题,它是一个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.