我正在创建在C中实现的python模块.我正在使用SWIG创建界面.有多种创建扩展的方法,我使用的是“首选方法”,它是通过python的distutils进行的,描述为here.我模块的名称为“ ParseEvents”,要对其进行编译,请运行以下两个命令:
swig -c++ -python ParseEvents.i
python setup.py build_ext --inplace
第一条命令创建一个文件ParseEvents_wrap.cxx
第二条命令使用以下setup.py文件:
from distutils.core import setup, Extension
ParseEvents_module = Extension('_ParseEvents',
sources=['ParseEvents_wrap.cxx',],
extra_compile_args=["-Wno-deprecated","-O3"],
)
setup (name = 'ParseEvents',
ext_modules = [ParseEvents_module,],
py_modules = ["ParseEvents"]
)
问题:我在哪里以及如何指定希望使用-O3编译器标签编译C代码?我猜想它只是在setup.py文件的“ extra_compile_args”部分中,但事实并非如此.当我运行第二个命令(python setup.py build_ext –inplace)时,输出如下:
running build_ext
building '_ParseEvents' extension
creating build
creating build/temp.linux-x86_64-2.6
gcc -pthread -fno-strict-aliasing -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 -fPIC -I/usr/include/python2.4 -c ParseEvents_wrap.cxx -o build/temp.linux-x86_64-2.4/ParseEvents_wrap.o -Wno-deprecated -O3
c++ -pthread -shared build/temp.linux-x86_64-2.4/ParseEvents_wrap.o -o _ParseEvents.so
请注意,-O2和-O3标志都出现在输出的倒数第二行中-我想删除-O2.
解决方法:
GCC文档明确指出:
http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Optimize-Options.html
如果使用多个-O选项(带或不带级别号),则最后一个这样的选项是有效的.
这意味着您的代码将根据需要使用-O3进行编译.无需担心重复的优化标志.