我正在与Waf建立一个项目。它有几个第三方依赖项,我想从我的主wscript
构建每个依赖项。我的项目组织如下:
/boost/
/gtest/
/source/
/waf
/wscript
/wscript_boost
/wscript_gtest
每个“依赖关系”wscript_*
都定义了命令,就像我的主wscript
一样。
def options(opt): pass
def configure(conf): pass
def build(bld): pass
如果我将依赖项wscript
文件放在依赖项文件夹中,我可以调用opt.recurse('boost gtest')
,但我不想将我的文件与第三方文件混合。
我的wscript
有没有办法打电话给wscript_boost
和wscript_gtest
?
答案 0 :(得分:2)
我认为当前的Waf实现不可能(waflib.Context.Context.recurse
使用全局WSCRIPT_FILE
变量)。
虽然很难看, 可能会在主wscript
的开头
import waflib.Context
original_recurse = waflib.Context.Context.recurse
def new_recurse(ctx,*args, **kwargs):
original_wscript_file = waflib.Context.WSCRIPT_FILE
try:
waflib.Context.WSCRIPT_FILE = (original_wscript_file +
kwargs.pop('suffix', ''))
original_recurse(ctx, *args, **kwargs)
finally:
waflib.Context.WSCRIPT_FILE = original_wscript_file
waflib.Context.Context.recurse = new_recurse
你的主wscript
会是这样的:
def configure(cfg):
cfg.recurse(suffix='_boost')
cfg.recurse(suffix='_gtest')
请注意,有一些副作用,因为当您在WSCRIPT_FILE
文件中时,wscript_boost
会加上后缀。
你也可以submit an issue参加waf项目。
答案 1 :(得分:0)
这样做的方法通常是将wscript放入每个子目录并使用recurse:
/boost/
/boost/wscript
/gtest/wscript
/source/
/waf
/wscript
并使用递归:
def build(bld):
# ...
bld.recurse("boost")
bld.recurse("gtest")
# ...