scons:如何根据时间戳提取档案

时间:2013-01-15 09:52:23

标签: scons

我的项目使用外部包。这些包在tarball中分发,并且在更新tarball时提取它们的内容。

例如,我使用boost。相应的外部包是boost.tar.bz2。该包包含头文件和库。我想要做的是在更新tarball时使用scons自动提取此存档的内容。

我可以使用“时间戳文件”使用Makefile实现此目的。当tarball比timestamp文件更新时,将自动提取存档:

all: external-packages

external-packages: boost xml2

boost: .boost-timestamp

xml2: .xml2-timestamp

.boost-timestamp: boost.tar.bz2
    @echo updating boost externals
    @tar xjf boost.tar.bz2
    @touch .boost-timestamp


.xml2-timestamp: xml2.tar.bz2
    @echo updating xml2 externals
    @tar xjf xml2.tar.bz2
    @touch .xml2-timestamp

clean:
    rm -rf .*-timestamp boost xml2

我如何用scons实现同样的目标?

1 个答案:

答案 0 :(得分:1)

我认为最好的办法是查看the untar builder

在site_scons文件夹中添加构建器函数/发射器后,您的scons文件可能如下所示:

env = Environment()
env..Append(BUILDERS = {'UnTar' : unTarBuilder})

external_package = "packages/boost.tar.bz2"
archive = env.UnTar(source=external_package) 

但是你应该注意到,untar构建器不会将目录带入发射器,因此不会在clean上删除这些

这个构建器的重点是发射器它将确保SCons知道它可以创建头,所以每当某些东西依赖于它们(有人包括它们)时它将启动untar构建器tar文件已经改变。

相关问题