私が取り組んでいる(VS2008からVS2010に変換した)C++プロジェクトは、いくつかのvcbuild .rulesファイルを使用してカスタムビルドルールを指定していました。これらの.rulesファイルには、ターゲットの再構築が必要な場合に作業する際に考慮する必要があるファイルのリストを指定したCustomBuildRuleノードの特定の "AdditionalDependencies"プロパティがあります。これらの "AdditionalDependencies"は、VS2010変換中に対応する.propsファイルに忠実に引き継がれました。カスタムMSBuildターゲットの実行をファイルのタイムスタンプに依存させるにはどうすればよいですか?
カスタムビルドルールに関連付けられた.targetsファイルは、AdditionalDependencies
をTarget
ノードのInputs
プロパティに追加します。これにより、依存関係にリストされているファイルのいずれかが存在しない場合でもターゲットが実行されますが、依存関係の1つがターゲットの出力よりも新しい場合、ターゲットは実行されません。すべてのファイルが実際に入力されているわけではなく、ターゲットのビルド中に使用される可能性のある実行可能ファイルを参照するものもあります。そのため、バージョンコントロールにチェックインされ、存在する可能性がありますが、ファイルの新しいバージョンでは、影響を受けるターゲットの再構築をトリガする必要があります。
ノードにはCondition
プロパティが表示されますが、このプロパティでサポートされている条件は既に実行されている「存在」テストを過ぎても表示されません。
2つのファイルのタイムスタンプ(または、理想的には、AdditionalDependencies
にリストされているファイルのタイムスタンプをターゲットの出力ファイルと比較する)を使用できる条件があるので、make-like "これらの依存関係が古くなった場合、このターゲットを再構築する"
はい、ターゲットの入力と出力のプロパティを認識しています。問題は、Inputsプロパティに 'generator'実行可能ファイルの名前が含まれていて、タイムスタンプが変更されたとしても、出力が必ずしも再生成されないことです。 –
おそらく入力プロパティの "ジェネレータ実行可能ファイルの名前"がファイルへのパスを表していないため、MSBuildは変更されたタイムスタンプを検出できません。 – KimCM