Выбор компилятора и настройка сборки#

Выбор конкретного компилятора#

Meson поддерживает стандартные переменные окружения CC, CXX и FC для выбора конкретных компиляторов C, C++ и/или Fortran. Эти переменные окружения документированы в справочные таблицы в документации Meson.

Обратите внимание, что переменные окружения применяются только при чистой сборке, потому что они влияют на этап конфигурации (т.е., meson setup). Инкрементная пересборка не реагирует на изменения в переменных окружения - необходимо запустить git clean -xdf и выполнить полную пересборку, или запустить meson setup --reconfigure.

Добавление пользовательского флага компилятора или компоновщика#

Meson по дизайну предпочитает настройку сборок через параметры командной строки, передаваемые в meson setup. Он предоставляет множество встроенных опций:

  • Для включения отладочной сборки и уровня оптимизации см. следующий раздел о "типах сборки".

  • Включение -Werror в переносимом виде осуществляется через -Dwerror=true,

  • Включение уровней предупреждений осуществляется через -Dwarning_level=, с один из {0, 1, 2, 3, everything},

  • Существует множество других встроенных опций, от активации Visual Studio (-Dvsenv=true) и сборка с оптимизацией времени линковки (-Db_lto) для изменения уровня языка C++ по умолчанию (-Dcpp_std='c++17') или флаги компоновщика (-Dcpp_link_args='-Wl,-z,defs').

Для полного обзора опций см. Страница документации встроенных опций Meson.

Meson также поддерживает стандартные переменные окружения CFLAGS, CXXFLAGS, FFLAGS и LDFLAGS для добавления дополнительных флагов - с той же оговоркой, что и в предыдущем разделе, о том, что эти переменные окружения учитываются только при чистой сборке, а не при инкрементной.

Использование различных типов сборки с Meson#

Meson предоставляет различные типы сборки при настройке проекта. Вы можете увидеть доступные опции для типов сборки в раздел "основные опции" документации Meson.

Предполагая, что вы начинаете с нуля (не git clean -xdf если необходимо), вы можете настроить сборку следующим образом, чтобы использовать debug тип сборки:

spin build -- -Dbuildtype=debug

Теперь вы можете использовать spin интерфейс для дальнейшей сборки, установки и тестирования NumPy как обычно:

spin test -s linalg

Это будет работать, потому что после начальной конфигурации Meson запомнит параметры конфигурации.

Управление параллелизмом сборки#

По умолчанию, ninja запустит 2*n_cpu + 2, с n_cpu количеством физических ядер CPU, параллельных заданий сборки. Это подходит в подавляющем большинстве случаев и обеспечивает близкое к оптимальному время сборки. В некоторых случаях, на машинах с небольшим объемом ОЗУ относительно количества ядер CPU, это может привести к исчерпанию памяти заданием. Если это происходит, уменьшите количество заданий N таким образом, чтобы у вас было не менее 2 ГБ ОЗУ на задачу. Например, для запуска 6 задач:

python -m pip install . -Ccompile-args="-j6"

или:

spin build -j6