Нет, нет, но миграция не так сложна.
Если вы никогда раньше не использовали waf, посмотрите на пример из папки demos/
(c
- типичный) и переварите waf book .
Затем, от make до waf:
- на этапе конфигурирования, материализованного функцией
configure()
, создайте экземпляры необходимых высокоуровневых инструментов и определите отношения с внешними библиотеками с помощью высокоуровневых инструментов, если это возможно (например, check_cfg()
handles pkg-config(1)
) или упадите назад в определении {DEFINES,INCLUDE,LIB,...}_$LIBNAME
, например:
def configure(cfg):
# I want to do C with any available compiler
cfg.load("compiler_c") # will detect MSVC, GCC, or other common compilers
# always include cwd
cfg.env.INCLUDES += ['.']
# I want to link all my programs with pthread
cfg.env.LIB += ['pthread']
# I want to link with static zlib
cfg.env.STLIB_Z += ['z']
# I want to use pkg-config to tell me how to link with pjsip
# and avoid typing the risky -DPJ_AUTOCONF=1 -pipe -O2 -march=k8-sse3 -mcx16 -msahf -mno-movbe -mno-aes -mno-pclmul -mno-popcnt -mno-abm -mno-lwp -mno-fma -mno-fma4 -mno-xop -mno-bmi -mno-tbm -mno-avx -mno-sse4.2 -mno-sse4.1 --param l1-cache-size=64 l1-cache-line-size=64 l2-cache-size=512 -mtune=k8 -DPJ_IS_BIG_ENDIAN=0 -DPJ_IS_LITTLE_ENDIAN=1 -I/home/portage/tmp/net-libs-pjsip-1.12/image//usr/include -L/home/portage/tmp/net-libs-pjsip-1.12/image//usr/lib -lpjsua -lpjsip-ua -lpjsip-simple -lpjsip -lpjmedia-codec -lpjmedia -lpjmedia-audiodev -lpjnath -lpjlib-util -lresample -lmilenage -lsrtp -lg7221codec -lpj -lm -luuid -lnsl -lrt -lpthread -lasound -lcrypto -lssl -lopencore-amrnb
# the *_PJSIP variables will be created
cfg.check_cfg(package='libpjproject',
uselib_store='PJSIP',
args='--libs --cflags',)
по возможности избегайте использования *FLAGS
, так как они зависят от компилятора.
- заменить стандартные правила makefile правилами высокого уровня (с использованием инструментов, инстанцированных в
configure()
), например.
bld(target='mylib',
features='c', # see note
source=['a.c', 'b.c'],
use=['Z', 'PJSIP'],
)
bld(target='name',
features='c cprogram',
source=['main.c'],
use=['mylib'],
)
- При необходимости можно создать нестандартные правила и инструменты высокого уровня, см. Ваф. Книгу
В целом, сценарии сборки будут короче и проще для чтения, чем make-файлы.
Они более линейные, а их содержание более семантическое.
Обратите внимание, что не требуется для создания статических библиотек, если вы не планируете их экспортировать.
waf tools не использует оболочку для вызова программ, поэтому ограничение длины командной строки (основная причина создания внутренних статических библиотек) не является проблемой.