1

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

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

我可以通过使用“时间戳文件”的 Makefile 来实现这一点。当 tarball 比时间戳文件更新时,会自动提取存档:

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 达到同样的效果?

4

1 回答 1

1

我认为你最好的选择是看看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 知道它可以创建标头,因此只要有某些东西依赖于它们(有人包括它们),它就会在 tar 文件发生更改时启动 untar 构建器。

于 2013-01-17T09:28:01.303 回答