2013-03-16 10 views
8

MSBuildで実行しようとしているビルドターゲットがあります。ターゲットには、中間ビルドの場合に時間を短縮するためにそこに置いた入出力があります。一方、入力ファイルは常に存在し(ヘッダーファイル)、出力は常に存在するとは限りません(XMLファイル)。MSBuild:最初の実行時にターゲット入力と出力が失敗する

タスクをスキップする可能性のある中間ビルドは、パフォーマンス面で非常にコストがかかるため、非常に望ましいです。

とにかく、入力と出力は素晴らしいIF出力が既に存在します。その場合、MSBuildは、すべてのファイルが最新であるため、ターゲットがスキップされたという非常に有用なメッセージを表示します。

出力ディレクトリとファイルは、MSBuildのは、次のメッセージで失敗していること(このタスクが実行され、非常に最初の時間)が存在しないとき、それはケースだ:それはありませんがあるため、ターゲット[ターゲット名]をスキップ

出力する。

詳細な冗長性を追加すると、@(OutputXML)の項目が空であるためにその理由がわかります。さて、今はどうですか?したがって、MSBuildの中間ビルドの概念全体が非常に堅牢であるとは思われません。

私の質問は中間ビルドの利点をどのように得ることができ、出力がないときでもこのターゲットを実行することですか?

<ItemGroup> 
    <Headers Include="..\**\*.h" /> 
    <OutputXML Include="$(OutputDir)\*.xml" /> 
</ItemGroup> 

<Target Name="Doxygen" 
     Inputs="@(Headers)" 
     Outputs="@(OutputXML)" > 
    <Exec ... /> 
</Target> 

注:私はすべてのGoogleかけてきた

ここに私のビルドスクリプトの関連部分がある(私は自分の仕事の延長を書くに頼る必要はありません願っています) 、msdn、そしてこのウェブサイトは答えを見つけようとしていて、これまでのところ成功していません。 MSBuildに関する一般的な情報は非常に有益ですが、

+0

こんにちはクリス、この投稿とは無関係です。私はMSBuildに関する助けを得るためにあなたに連絡しています。私はMsBuildを初めて使用しており、その場でソリューションファイルを生成しようとしています。私はあなたが何か類似のソリューションを持っていることを述べた下のSOの投稿に気づいた。あなたはそれを私と共有することができますか?ありがとう。 http://stackoverflow.com/questions/13300294/can-i-use-msbuild-scripts-to-replace-sln-files – user559788

答えて

6

ダミー出力はどうですか?

<ItemGroup> 
<Headers Include="..\**\*.h" /> 
<OutputXML Include="$(OutputDir)\*.xml" /> 
</ItemGroup> 

<ItemGroup Condition="'@(OutputXML)' == ''"> 
<OutputXML Include="$(OutputDir)\dummy.xml" /> 
</ItemGroup> 

<Target Name="Doxygen" 
     Inputs="@(Headers)" 
     Outputs="@(OutputXML)" > 
<Exec ... /> 
</Target> 

OutputDirをdummy.xmlに設定すると、ファイルが存在しなくても空ではなくなります。ワイルドカードは、.xmlを検索していて見つからなかったことを示しますが、特定の名前を付けても検索は行われないため、存在するかどうかは気にしません。

+0

完全に作業しました。ありがとう、私はあなたが再び同じアイテムを再定義できることに気づいていませんでした。しかし、それは素晴らしい作品です! –

関連する問題