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
。
我有一个 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
。