我希望将大型项目从 using 迁移make
到 using waf
。是否有任何工具可以在一定程度上帮助自动化流程?
问问题
552 次
1 回答
4
不,没有,但迁移并不那么复杂。
如果您以前从未使用过 waf,请查看demos/
文件夹中的示例(c
是典型的示例),并消化waf 书。
然后,从 make 到 waf:
- 在由函数具体化的配置步骤中
configure()
,实例化所需的高级工具,并尽可能使用高级工具(例如check_cfg()
句柄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'],
)
- 如果需要,可以创建非标准规则和高级工具,请参阅 waf book
总体而言,构建脚本将比生成文件更短且更易于阅读。它们更线性,内容更语义化。
请注意,您不需要如果您不打算导出静态库,则waf 工具不使用 shell 调用程序,所以命令行长度限制(创建内部静态库的主要原因)不是问题。
于 2012-02-05T16:54:57.520 回答