1

SConsの並列ビルドでディレクトリの依存関係に問題があります。次の(簡略化された)階層にある単一のSConstructを持つ2つのプロジェクトについて考えてみます。

- SConstruct
- project1
  - src
- project2
  - src
- build
  - project1
  - project2
- dist
  - project1
  - project2

project1とproject2はそれぞれ、関連するビルドディレクトリ(バリアントdirを使用)の下にビルドされることになっており、いくつかのターゲットを関連するdistディレクトリの下にインストールする必要があります。

プロジェクト2は、プロジェクト1の距離に依存します。私はこの依存関係を次のDepends()ようなステートメントを使用して明示的に述べました:

Depends('project2', 'dist/project1')

非並列ビルドを使用する場合、問題はありません。プロジェクト1が完全にビルドされ、ターゲットがdistディレクトリにインストールされてから、プロジェクト2がビルドされます。ただし、複数のジョブ(4)を使用すると、プロジェクト2は、プロジェクト1のディレクトリInstall()にインストールする必要のあるファイルに対して実行されているビルダーと同時にビルドされます。dist

だから、私の質問は次のとおりです。

  • Depends(project2, dist/project1)ステートメントは、ディレクトリの作成を指しますか、dist/project1それともすべてのディレクトリの子の構築の完了を指しますか?
  • この問題をどのように解決すればよいですか?

どうもありがとうございます、

BugoK。

4

1 に答える 1

1

Depends()関数で実際のディレクトリを文字列として指定する代わりに、SConsproject1およびproject2ビルダーによって返される実際のターゲットを指定してみてください。すべてのSConsビルダー(または少なくともそれらのほとんど)は、影響を受けるターゲットをオブジェクトとして返します。まったく同じファイル/ディレクトリパスを使用しない場合は考慮されないため、ファイル/ディレクトリ名の代わりにこのオブジェクトを使用することをお勧めします。同じターゲットとして。

次に例を示します。それに応じてコンテンツを入力してください。

project2Target = Install()
# Im not sure how you're building project1, so replace the builder
project1Target = Proj1DistBuiler()

Depends(project2Target, project1Target)
于 2013-02-18T17:53:16.987 に答える