Удалите все компиляционные аргументы по умолчанию в setup.py

Я строю модуль расширения с distutils, который, к сожалению, вызывает компилятор с кучей аргументов, которые мне не нужны. В частности, он использует переменную CFLAGS, определенную в /usr/lib64/python2.7/config/Makefile и возвращаемую также

>>> 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 был пуст в make-файле, но на самом деле установка OPT = «» не имеет никакого эффекта. Есть ли способ сказать distutils не добавлять эти флаги? Я знаю, что могу переопределить большинство из них, добавив свои собственные флаги (вручную отменяя определения макросов, таких как -DNDEBUG с -UNDEBUG и переопределяя -O2 с -O0), но это действительно ужасно, и определенно должен быть лучший способ.

2

Решение

У меня была та же проблема, что установка 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="-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
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]