質問

scons は、ファイルの変更時間ではなく MD5 ハッシュを使用して、依存関係を構築する必要があるかどうかを判断します。

これをデフォルトの動作にしたいのですが。しかし、ファイルを編集して異なるものにする以外に、特定のファイルが古いものであると強制的に想定させる方法(「タッチ」に相当)はあるでしょうか?

編集: 使用事例:

バイナリ ファイル F は、ツール X を使用して別のファイル G を作成するために使用されます。何らかの理由でファイル G が変更された (破損したか、編集した) か、ツール X が変更されたため、ファイル G とその下流のすべてを再作成したいと考えています。

編集: これは時折のみ使用します。これは常に起こってほしくないのですが、私が要求したときだけです。また、特定のファイルが事前にわからない場合もあります。このため、特定のファイルを構築するために SConscript/SConstruct ファイルを変更したくありません。私がやりたいのは、コマンドプロンプトでこれを行うことです。

scons {something to specify file foobar.h}

これにより、scons は foobar.h に応じてすべてのファイルをビルドすることになりますが、単に次のように入力するだけです。 scons 依存関係チェックのために MD5 ハッシュを使用して通常のビルドを実行します。ビルド時間を大幅に増加させない方法があれば、これを可能にするために事前に SConscript/SConstruct ファイルを編集しても構いません (カスタム Decider だと思います)。

役に立ちましたか?

解決

あなたが具体的な目標をきれいにして構築することができますが、sconsのの--interactiveオプションを見たことがあります。

これを記述した

マニュアルページを参照してください。

他のヒント

それを直接行う方法はないと思います。問題のソース ファイルに次のような明白な出力が 1 つある場合、 test.o から作成されました test.c, 、その後削除します test.o ソース ファイルの再コンパイルが強制的に行われます。

代わりに触れたいなら test.h これは複数の異なるソース ファイルからインクルードされているため、プロジェクト全体をクリーンにして、すべてが再構築されることを確認したほうがよい場合があります。

そうは言っても、次のことについて読みたいかもしれません。 Decider() 関数 これにより、ファイルの依存関係をどのように扱うかを選択できます。プロジェクト内の特定のファイルに対してカスタムのディサイダー関数を選択することもできるため、グローバル ヘッダー ファイルがある場合は、 touch そして再構築することができます。

アップデート:最新の質問に答えるには、ファイル G を削除するだけです。Scons は、次回ビルドするときに X を実行して F から再作成します。

私はすべての方法時間の分と秒の完全な日付とダミーターゲットファイルを作成します。それから私は、他のステップは、このダミーターゲットファイルに依存しています。これは、MD5値にビルドステップは、再コンパイルするたびに変更し、再コンパイルする後続のステップが発生します。別の方法としては、ダミーターゲットを削除し、あまりにも再コンパイルをカスケード接続することができます。

私は私のEDAビルドの流れに一つ一つのステップからのすべての出力を予測することはできませんので、

は個人的に、私はこれは非常に便利。また私はので、メンテナンスコストのすべてのビルドステップのすべての出力を予測してみたいのです。

グレッグが述べたように、私は、ディサイダ()関数を確信している、より多くのsconsのようですが、私は個人的には、タイムスタンプのファイルを持っていたいます。

あなたのSConstructファイルでは、あなたのファイルを表すノードを展開します。この後、あなたはそれが構築されていることを確認するために、 Node.always_build(真)を使用することができるはず、私はこれも再構築するために、その扶養を強制すると思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top