gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:05:23 28 4
gpt4 key购买 nike

我正在使用 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

对此 question 给出的答案不起作用;从命令行设置 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 并覆盖 -O2 -O0),但这真的很丑陋,绝对应该有更好的方法。

最佳答案

我遇到了同样的问题,即设置 OPTCFLAGS 没有效果。好像other builds也有这个问题,而且是Distutils bug .

这绝不是一个令人满意的解决方案,并不比你建议的更难看,但我最终能够禁用这些标志,并通过修改 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="-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

关于c++ - 删除 setup.py 中的所有默认编译器参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19779416/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com