如何在distutils中指定C++11?
我有一个模块需要用C++11来编译。在GCC和Clang这两个编译器上,这意味着要加上一个叫做std=c++11
的选项,或者在旧版编译器上用std=c++0x
。
不过,Python在编译的时候并没有使用这个选项,所以Distutils在编译模块时不会把它包含进去。
那么,使用Distutils编译C++11代码的最佳方法是什么呢?
2 个回答
3
你可以通过设置环境变量来改变一些Distutils的默认编译和链接选项。这可能需要你根据所使用的平台和Python的构建方式进行一些尝试。不过一般来说,修改CFLAGS
会影响编译阶段,而LDSHARED
或LDFLAGS
中的一个会影响链接阶段。
export CFLAGS='-std=c++11'
pip install blah
或者
export CFLAGS='-std=c++11'
python setup.py install
在OS X系统上,你还可以使用ARCHFLAGS
这个环境变量,它的好处是不会覆盖原来的CFLAGS
或LDSHARED
的值。
20
你可以使用 distutils.core.Extension
里的 extra_compile_args
参数:
ext = Extension('foo', sources=[....],
libraries=[....],
extra_compile_args=['-std=c++11'],
....)
需要注意的是,这个参数的效果完全依赖于你使用的平台。有些老版本的 gcc 和 clang 甚至都不支持这个参数。