Setuptools
наследует множество функциональных возможностей от distutils
, и одним из них является определение cflags для сборки c -extensions.
Когда команда build_ext
запущена, она вызывает distutils.sysconfig.customize_compiler()
, который, в свою очередь, вызывает distutils.sysconfig.get_config_vars()
:
def customize_compiler(compiler):
...
(cc, cxx, cflags, ccshared, ldshared, shlib_suffix, ar, ar_flags) = \
get_config_vars('CC', 'CXX', 'CFLAGS',
'CCSHARED', 'LDSHARED', 'SHLIB_SUFFIX', 'AR', 'ARFLAGS')
...
, чтобы получить флаги по умолчанию, которые позже будут расширены значениями из переменной окружения CFLAGS и из файла настроек и , передаваемых компилятору .
get_config_vars()
анализирует (по крайней мере, на Linux ) makefile, а также config-header, то есть pyconfig.h, и, таким образом, получает cflags (среди прочего), с которыми был собран текущий исполняемый файл Python. Затем для построения расширений используются те же самые cflags.
При необходимости можно манипулировать этими встроенными флагами, как я показал, например, в этом SO-post . Является ли это умным делом, это другой вопрос.
Это немного более тонко на Windows, где get_config_vars()
не предоставляет такой большой информации - поэтому используются другие приемы строить с правильными параметрами (см., например, SO-post ).