Как указать С++ 11 с distutils?
У меня есть модуль, который необходимо скомпилировать с помощью С++ 11. В GCC и Clang это означает переключатель std=c++11
или std=c++0x
для старых компиляторов.
Python не скомпилирован с этим коммутатором, поэтому Distutils не включает его при компиляции модулей.
Каков предпочтительный способ компиляции кода С++ 11 с distutils?
Ответы
Ответ 1
Вы можете использовать параметр extra_compile_args
distutils.core.Extension
:
ext = Extension('foo', sources=[....],
libraries=[....],
extra_compile_args=['-std=c++11'],
....)
Обратите внимание, что это полностью зависит от платформы. Он даже не работает над некоторыми более старыми версиями gcc и clang.
Ответ 2
Вы можете переопределить значения по умолчанию для различных разделов компиляции 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
.