2019-06-25

vak: (Default)
Набрёл на новую утилиту `waf', заменяющую традиционные скрипты makefile и configure. До этого несколько лет назад пытался использовать cmake, не то чтобы безуспешно, но радости было мало. А здесь вроде как намного проще и достаточно универсально выходит.

Утилита waf представляет собой питоновский бинарный модуль размером 100 килобайт и не требует внешних зависимостей (кроме собственно Питона). Устанавливается командой:
    curl -o ~/bin/waf https://waf.io/waf-2.0.17
Пример скрипта для компиляции программы на Си:
#! /usr/bin/env python
# encoding: utf-8
import sys

APPNAME = 'sdwrite'
VERSION = '0.1'

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

def configure(conf):
    out = 'build'
    conf.load('compiler_c')

def build(bld):
    LIBS = []
    if sys.platform == 'linux2':
        LIBS = ['udev']
    if sys.platform == 'darwin':
        LIBS = ['-framework', 'IOKit', '-framework', 'CoreFoundation']

    bld.program(
        source       = 'sdwriter.c',
        target       = APPNAME,
        includes     = ['.'],
        lib          = LIBS,
        install_path = '/usr/local/bin',
        cflags       = ['-g', '-O', '-Wall'],
        ldflags      = ['-g'],
    )
Конфигурация и компиляция программы:
    waf configure build
Установка:
    waf install
Удаление временных файлов:
    waf clean
    waf distclean
Подробное описание есть здесь: https://waf.io/book/