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 に答える