2017-04-05 3 views
0

私は、C++からいくつかのライブラリを構築するためのSConsビルドシステムと、SWIG経由のPythonラッパーを用意しました。その後、結果はSConsビルドの一部でもあるデータ処理に使用されます。データ処理は、構築されたSWIGラップライブラリを使用するPythonスクリプトです。SConsソーススキャナの実行を遅らせるには?

すべてのライブラリとラッパーが構築された後にデータ処理が開始され、うまく機能するように依存関係を設定しました。しかし、警告があります(あなたはそれを推測しましたか?))。ソーススキャナを追加したいと思っています。ソーススキャナはSWIGライブラリのいくつかを使って依存関係を拡張しています。問題は、スキャナがすぐに実行されないことです。実際、私はそれが2回実行されているのを見ています - ある時点ではビルドの早い段階で、もう1つはデータ処理が始まる直前です。したがって、並列ビルドで実行される最初のスキャナは、通常、必要なライブラリがすべてビルドされる前に実行されるため、失敗します。

スキャナ自体をライブラリターゲットに依存させるにはどうすればよいですか?

または、スキャナの実行を遅らせたり、最初のスキャナの実行を取り除いたりできますか?

他のアイデアはありますか?

+0

だからあなたが働きたいのは、あなたがsconsでPythonモジュール(コンパイル済み)を構築し、そのモジュールをsconsにロードして使用するということですか? – bdbaddog

+0

はい、基本的に。スキャナーでのみ使用し、配合物自体を作るのではありません。スキャナがターゲットを構築する直前にのみ実行された場合、正常に動作します。 –

答えて

0

回避策私はと思うと、スキャナをスキャナではなくスキャンプロセスを実行するビルダーに変え、すべての依存関係をリストするファイルを生成します。データ処理ビルドには、単にそのファイルを解析するスキャナがあります。 SConsは、スキャンしたソースファイルがビルダーのターゲットであることを認識しているため、早期にSConsを実行しようとは思わないでしょう。

ビルドセットアップを複雑にし、それほど小さいファイルではないファイルI/Oを追加するため、サブパルス解決策です(依存関係は長いパスを持つ数千のファイルです) 。

0

もう1つの回避策の1つです。 * .i swigインタフェースファイルが "node"引数として渡された場合、スキャナが生成されるファイルのリストを推測することは可能ですか?このようにして、スキャナは依存関係のリストを生成するために実際にファイルが存在する必要はありません。

一般に、この問題の解決策は、SWIGライブラリが実際に生成される前に積極的に依存関係を推論するためのロジックを書くことなのかと疑問に思っています。私は、 "_ *。so"ファイル自体を見ることで多くの情報が得られるとは考えていません。

+0

スキャナ "ノード"は、関連付けられたビルダーからの各ソースファイルを1つ1つ、エミッタが生成するものに加えて自動的に作成します。 Scanner入力で指定された入力がない場合、ビルドは失敗します。そして、あなたはまだそのスキャナでSWIGライブラリを使うことができません。 –

+0

しかし、私の理解は、実際に依存関係が存在する必要はありません。以前のビルダーがそれらのファイルをターゲットの1つとして含んでいる場合、スキャナーによって示される関連する依存関係が、スキャナーに対応するビルダーの前に実行されるビルダーによって生成されることが約束されているため、sconsはビルドをうれしく実行します。 –

関連する問題