1

我的构建过程的一部分是创建一个输入目录的 tar 文件,位于src/bundle/bundle. 在 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 使用绝对路径名是不好的做法,但在我解决这个问题之前只是中间的。

4

1 回答 1

1

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

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

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

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

PS。您可能希望将build_dir参数名称更改为variant_dir,因为在最近的 SCons 版本中不推荐使用前者,而支持后者。

于 2010-06-10T07:50:48.877 回答