Waf

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

Waf
Тип инструментальное программное обеспечение
Разработчик Томас Надь
Написана на Python
Операционная система Windows, POSIX
Последняя версия 2.0.20 (24 ноября 2019 года)
Лицензия BSD
Сайт waf.io

Обладает встроенной поддержкой Си, 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

Примечания

Ссылки


This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.