Waf (Waf)

Перейти к навигации Перейти к поиску
Waf
Тип инструментальное программное обеспечение
Разработчик Томас Надь
Написана на Python
Операционные системы Windows, POSIX
Последняя версия 2.0.25 (1 января 2023 года)
Репозиторий gitlab.com/ita1024/waf/
Лицензия BSD
Сайт waf.io

Waf — система автоматизации сборки, написанная на Python, использующая сценарные файлы конфигурации на языке Python. Основной автор — Томас Надь (Thomas Nagy).

Обладает встроенной поддержкой Си, C++, D, Java, Фортрана, Qt; обеспечивает генерацию документов TeX и LaTeX. Поддержка других языков или форматов файлов может быть реализована с помощью пользовательских расширений (tools). Для Си и C++ автоматически анализируются зависимости, при этом в отличие от make не нужно отдельно выполнять команду make depend. Также имеется встроенная возможность поиска необходимых для сборки файлов (#include-файлы, библиотеки и прочие сборочные артефакты).

Поддерживается обнаружение изменений содержимого файлов по контрольным суммам MD5, наряду с традиционным обнаружением изменений по времени записи файла. Имеется возможность параллельной сборки. Также для ускорения сборки используется кеширование — подобно ccache, но для любых типов файлов.

Долгое время проект KDE использовал для сборки пакет GNU build system (Autotools), но в силу ограничений последнего решил перейти на SCons[1]. В рамках данного перехода Томас Надь создал служебную программу BKsys, которая должна была работать поверх SCons и предоставлять функциональность, аналогичную Autotools. Однако позже Надь решил, что архитектурные недостатки SCons (в частности проблема производительности на крупных проектах) слишком велики и трудно исправимы. Поэтому он решил полностью переписать SCons, и в результате появился «Waf».

Некоторое время проект KDE рассматривал BKsys (а позже Waf) в качестве своей основной системы сборки, однако выбор был сделан в пользу CMake, так как BKsys не решал проблем SCons, а Waf все ещё находился в состоянии альфа-версии[1]. Тем не менее, система получила определённое распространение, в частности, используется проектами Samba, Ardour, Geany, Jack Audio.

Пример простого wscript-файла, который компилирует файл «hello-world.c», используя один из доступных компиляторов Си:

top = '.'
out = 'build'

def options(opt):
    opt.load('compiler_c')
 	
def configure(conf):
    conf.load('compiler_c')

def build(bld):
    bld.program(source = 'hello-world.c', target = 'hello-world', features = 'c cprogram')

Сборка проекта запускается следующей командой:

waf configure build

Примечания

[править | править код]
  1. 1 2 Why the KDE project switched to CMake. Дата обращения: 22 декабря 2010. Архивировано 7 мая 2011 года.