scons:源目录不会被复制到构建目录中

时间:2010-06-10 03:41:33

标签: tar scons

我的构建过程的一部分是创建一个位于src/bundle/bundle的输入目录的tar文件。在src / bundle / SConscript中:

Import('*')

bundleDir = Dir("bundle")
jsontar = Command("bundle.tar", bundleDir,
                  "/home/dbender/bin/mkvgconf $SOURCE $TARGET")

在我的SConstruct中:

SConscript(Split('src/bundle/SConscript'),
  exports='bin_env lib_env', build_dir='tmp/bundle')

尝试构建时:

scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
/home/dbender/bin/mkvgconf tmp/bundle/bundle tmp/bundle/bundle.tar
Input directory tmp/bundle/bundle not found!
scons: *** [tmp/bundle/bundle.tar] Error 1
scons: building terminated because of errors.

显然,scons没有将src / bundle / bundle复制到tmp / bundle / bundle,但我很难过。

脚注: 使用mkvgconf的绝对路径名是不好的做法,但只是中间问题才解决。

1 个答案:

答案 0 :(得分:1)

SCons对输入src/bundle/bundle的内容一无所知 - 只有程序mkvgconf知道它对该目录的作用。

一种解决方案是在SConscript中添加显式依赖项:

import os
Depends('bundle.tar', Glob(str(bundleDir) + os.path.sep + '*'))

这也意味着当您更新bundle目录的内容时,将重新运行mkvgconf脚本。

PS。您可能希望将build_dir参数名称更改为variant_dir,因为在最近的SCons版本中前者被弃用而不赞成后者。