waf:自定义规则中的 Uselib 选项

waf: Uselib options in custom rule

我有一个 waf 构建脚本,需要调用一个不受官方支持的程序。

#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:LIB} ${DINC_ST:INCLUDES}",
    use="xml2",
    source="header.h",
    target="target.d",
    )

这扩展为 dstep header.h -o target.d -lc -ld -I/usr/include/libxml2,因此只有全局 LIB 变量有效,use 参数似乎完全被忽略了。

如何让它尊重使用参数?

要使 waf 处理 use 关键字,您必须将 use 功能添加到您的任务生成器。您还需要添加一个“编译”感知功能,如 c、d 或 cxx。像这样:


def build(bld):
  bld(
    rule="dstep ${SRC} -o ${TGT} ${LIB_ST:LIB} ${DINC_ST:INCLUDES}",
    features = ["use", "c"],
    use="xml2",
    source="header.h",
    target="target.d",
  )

您还可以为您的 dstep 编程细节(您必须定义 dstep 功能并定义 USELIB_VARS["dstep"]

注意:请参阅 waf 代码中的 ccroot.py