是否有工具可以帮助从make迁移到waf?

时间:2012-01-30 17:33:46

标签: migration makefile waf

我希望将大型项目从使用make迁移到使用waf。是否有任何工具可以在某种程度上帮助自动化过程?

1 个答案:

答案 0 :(得分:4)

不,没有,但迁移并不复杂。

如果您以前从未使用过waf,请查看demos/文件夹中的示例(c是典型文件夹),并摘要 waf book 。< / p>

然后,从make到waf:

  • 在配置步骤中,由configure()函数实现,实现所需的高级工具,并尽可能使用高级工具定义与外部库的关系(例如。check_cfg()处理{{ 1}})或回退定义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',) ,因为它们是特定于编译器的。

  • 用高级规则替换标准的makefile规则(使用*FLAGS中实例化的工具),例如
configure()
  • 如果需要,可以创建非标准规则和高级工具,请参阅waf book

总的来说,构建脚本比makefile更短,更容易阅读。 它们更线性,内容更具语义性。

请注意,如果您不打算导出静态库,则不需要 来创建静态库。 waf工具不使用shell来调用程序,因此命令行长度限制(创建内部静态库的主要原因)不是问题。