waf自定义规则中Uselib选项失效,如何让use参数正常生效
WAF自定义规则识别use参数的解决方法
问题根源
你当前的配置存在两个核心问题导致use参数不生效:
- 自定义rule默认未启用
use特性,WAF不会自动解析use字段的依赖配置,也不会将对应依赖的库、头文件变量合并到当前任务的变量空间 - 规则字符串中显式指定只读取全局的
LIB和INCLUDES变量,没有读取合并了依赖后的任务级变量
解决方法
仅需要对build段的代码做两处修改即可:
- 给任务增加
features="use"配置,启用WAF的依赖合并逻辑 - 将rule中
${LIB_ST:LIB}改为${LIB_ST},${DINC_ST:INCLUDES}改为${DINC_ST},读取合并后的任务级变量
修改后的完整wscript代码如下:
#file wscript def configure(conf): conf.env.LIB = ['c', 'd'] conf.env.INCLUDES = ['include'] conf.env.LIB_xml2 = ['xml2'] conf.env.INCLUDES_xml2 = ['/usr/include/libxml2'] def build(bld): bld( rule="dstep ${SRC} -o ${TGT} ${LIB_ST} ${DINC_ST}", features="use", use="xml2", source="header.h", target="target.d", )
生效验证
修改后规则展开的命令为:dstep header.h -o target.d -lc -ld -lxml2 -Iinclude -I/usr/include/libxml2
全局变量和use指定的xml2依赖都会正常生效。
内容的提问来源于stack exchange,提问作者Inkrementator
相关产品推荐
相关产品推荐

