我编写了一个boost-python扩展,目前正在通过distutils构建。
不幸的是,我无法在distutils中找到一种方法来构建没有调试符号的扩展,或者在安装时将符号从扩展中剥离。
注意:我没有传递--debug或-g来构建distutils的命令(例如,python setup.py build),而我的编译器在Linux上是gcc。
示例setup.py:
from distutils.core import setup
from distutils.extension import Extension
setup(name="myPy",
ext_modules = [
Extension("MyPyExt", ["MyPyExt.cpp"],
libraries = ["boost_python"])
])
答案 0 :(得分:7)
您可以使用选项extra_compile_args
将参数传递给最后附加的编译器,从而具有最高优先级。因此,如果在ClientRectangle
中包含-g0
(无调试符号),则会覆盖Distutils / Setuptools设置的extra_compile_args
。在您的示例中:
-g
另请参阅:How may I override the compiler (gcc) flags that setup.py uses by default?
答案 1 :(得分:3)
我找到了一种方法,但有点hacky:
from distutils import sysconfig
from distutils.core import setup
import platform
if platform.system() != 'Windows': # When compilinig con visual no -g is added to params
cflags = sysconfig.get_config_var('CFLAGS')
opt = sysconfig.get_config_var('OPT')
sysconfig._config_vars['CFLAGS'] = cflags.replace(' -g ', ' ')
sysconfig._config_vars['OPT'] = opt.replace(' -g ', ' ')
if platform.system() == 'Linux': # In macos there seems not to be -g in LDSHARED
ldshared = sysconfig.get_config_var('LDSHARED')
sysconfig._config_vars['LDSHARED'] = ldshared.replace(' -g ', ' ')
setup(...)
答案 2 :(得分:0)
@ hithwen的解决方案适用于MacPorts安装的python3.5,在MacOS 10.13.4上运行。
但是,platform.system()
会返回'Darwin'
,而不是' Linux'就我而言。
在Ubuntu 16.04上,-g
似乎出现在开头或结尾。
所以稍微调整一下:
import sys
import re
from distutils import sysconfig
from distutils.core import setup, Extension
if sys.platform == 'linux' or sys.platform == 'darwin':
sysconfig.get_config_var(None) # to fill up _config_vars
d = sysconfig._config_vars
for x in ['OPT', 'CFLAGS', 'PY_CFLAGS', 'PY_CORE_CFLAGS', 'CONFIGURE_CFLAGS', 'LDSHARED']:
d[x] = re.sub(' -g ', ' ', d[x])
d[x] = re.sub('^-g ', '', d[x])
d[x] = re.sub(' -g$', '', d[x])
setup(...)
谢谢@hithwen!