2011-08-18 156 views
1

是否有可能让SCons提醒我使用它的依赖性跟踪来执行手动步骤?SCons手动构建步骤

我的构建使用.fla文件中的.swc输出,你不能使用命令行来完成。

我想是这样的:

env.Command(target, sources + SHARED_SOURCES, 
      Action(lambda target, source, env: 1, "Out of date: $TARGET")) 

但与方法,我必须使用决胜局( '使')或获得:

 
$ scons --debug=explain 
scons: rebuilding `view_bin\RoleplaySkin.swc' because `view_src\RoleplaySkin.fla' changed 
Out of date: view_bin\RoleplaySkin.swc 
scons: *** [view_bin\RoleplaySkin.swc] Error 1 

而且,更重要的是,使用SCons从未实现它的缓存已经过时,因此在.sconsign.dblite中写入签名后环境或源中的任何更改都意味着它将尝试重建(因此总是失败)。

回答

0

如何在使用Precious方法保护* .swc输出之前将其转换为* .fla?

+0

(我假设你的意思是*来自fla,正如我写的) - 我没有看到如何保护过时的中间结果有助于。问题是SCons只在* it *构建它时更新sconsign.dblite,所以根据我可以判断写入正确的输入/输出签名是不可能的,因此SCons永远不会知道什么时候需要重建.swc(目前,只要有任何输入被触动,我就必须重新构建所有14fflas,即使更改已回滚,这对修补程序队列来说也很烦人) –

0

如何创建自己的RemindMe构建器来提醒您并且无法构建目标?

这将是这个样子:

def remind_me(target, source, env): 
    os.remove(target.abspath) #we do not build, we destroy 
    print ("This is a friendly reminder, your $SOURCE is out of date, run manual build step") 
    return None 

reminder = Builder(action = remind_me, 
        suffix = '.swc', 
        src_suffix = '.fla') 
env = Environment(BUILDERS = {'RemindMe' : reminder}) 

#Run builder like this 
swc_file = env.RemindMe('some_fla_file') 
final_target = env.BuildWithSWC(some_other_target,swc_file) 

然而,这只是一种理论,我从来没有尝试过实际删除的目标,而不是创建它。至少可以尝试一下。

+0

它实际上与我现在所做的非常接近我抛出内部构建错误,而不是移除输出(如果不使用Precious,SCons实际上会自动执行),以获得更好的错误消息。看起来我们将为其他项目使用Rake,所以我们可能只是将这一个也移动到... –