3

.cmdVisual Studio (それぞれ 2005、2008、2010、2012、および 2013) プロジェクトのリンク前ステージ内からスクリプトを実行して、これが完全なリビルド ( Build.RebuildSolution/ Build.RebuildOnlyProject) か "通常の" ビルド ( Build.BuildSolution/ ) かを判断するにはどうすればよいBuild.BuildOnlyProjectですか?

これは外部スクリプト (知っておく必要がある場合は LuaJIT) であり、プロジェクトのビルドごとにライブラリを再構築したくありません。代わりに、完全な再構築を、まさにそのオプションを選択した状況に限定したいと思います。

4

4 に答える 4

2

.cmdVisual Studio (それぞれ 2005、2008、2010、2012、および 2013) プロジェクトのリンク前ステージ内からスクリプトを実行して、これが完全な再構築かどうかを判断するにはどうすればよいですか?

あなたが求めていることを正確に実行できるかどうかはわかりません-おそらく他の誰かがそれを行う方法を知っています. ただし、別のアプローチを提案します。

私のアプローチは、Lua ライブラリのビルドをリンク前のステップから別の Visual Studio NMake プロジェクトに削除することです。NMake プロジェクトを作成すると、どのタイプのビルド ( buildまたはrebuild ) が発生しているかを知ることができます。

Visual Studio のそれ以降のバージョンでは、単にプロジェクトの種類を "Make" と呼ぶことに注意してください。ここでの説明のために、プロジェクト タイプを「NMake」と呼びます。これは単なる名前の違いであり、基になるビルド プロジェクトは 2 つのバージョン間で同じままであると思います。

簡単なテストとして、2 つの Visual Studio アプリケーションを作成しました。1) バッチ ファイルを呼び出してスタティック ライブラリを作成する NMake プロジェクト、および 2) 手順 1 のライブラリを使用するコンソール アプリケーションです。

NMake プロジェクト

Visual Studio で新しい NMake プロジェクトを作成すると、MS-DOS コマンドを提供できるダイアログが表示されます。

新しい make プロジェクトのダイアログ

ご覧のとおり、Build、Clean、Rebuild などのコマンドがあります。コマンドを含む上記のダイアログのスクリーン ショットはありませんが、NMake プロジェクトのプロパティは次のとおりです。

NMake lib プロジェクトのプロパティ

私の Build コマンドは、出力ファイル (lua.lib) の存在をチェックするだけです。存在しない場合は、rebuild.batバッチ ファイルを呼び出します。Rebuild コマンドは常にバッチ ファイルを呼び出します。私の Clean コマンドは、出力を削除するだけです。Output コマンドが何に使用されるのかよくわかりませんが、ビルド出力 (lua.lib) へのパスを入力しただけです。

ビルドを実行すると、 lua.lib ファイルが存在しない場合にのみ作成されます。すでに存在する場合は、何も行われません。再構築を行うと、新しい lua.lib ファイルが作成されます。

コンソール アプリケーション

私のコンソール アプリケーションでは、NMake プロジェクトへの参照を追加しました。このようにして、コンソール アプリケーションのに NMake プロジェクトがビルドされます。コンソール アプリケーションのリファレンス ページは次のとおりです。

アプリケーションのリファレンス

また、アプリケーションのリンク段階で入力として lua.lib ファイルを追加しました。

アプリケーションのリンク プロパティ

コンソール アプリケーションがビルドされると (ビルド中)、必要に応じて NMake プロジェクトがビルドされ、リンカー ステージで出力 (lua.lib) が使用されます。コンソール アプリケーションが再構築されると (再構築中)、NMake プロジェクトも再構築されます。

他の考え

上記のスクリーン ショットは、プロパティのデバッグ バージョンのみを示しています。プロジェクトでは、リリース バージョンを考慮する必要があります。これを処理するための VS マクロがおそらく存在しますが、C/C++ で何かを行ってから何年も経っているため、よくわかりません。

上記のテストでは、ビルドとリビルドの両方に 1 つのビルド バッチ ファイルを使用しました。明らかに、同じことを行うことも、別のバッチ ファイルを使用することもできます。

于 2013-12-05T02:05:51.107 に答える
0

少しハックかもしれませんが、.csprojファイルにはセクションがあります

<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>

BeforeBuild から変数を設定し、cmd スクリプトから取得できます。後で AfterBuild でこの変数をリセットすると、準備完了です。

于 2013-12-01T15:00:05.737 に答える
0

はるかに簡単です。次のターゲットをビルド ファイルまたは Visual Studio プロジェクトに追加するだけです。

  <Target Name="AfterRebuild">
    <Message Text="AFTER REBUILD" Importance="High" />
    <!-- 
        Do whatever Needs to be done on Rebuild - as the message shows in VS Output 
        window it is only executed when an explicit rebuild is triggered  
    -->
  </Target>

2 段階のソリューションが必要な場合は、これをテンプレートとして使用します。

  <PropertyGroup>
    <IsRebuild>false</IsRebuild>
  </PropertyGroup>
  <Target Name="BeforeRebuild">
    <Message Text="BEFORE REBUILD" Importance="High" />
      <PropertyGroup>
        <IsRebuild>true</IsRebuild>
      </PropertyGroup>
  </Target>
  <Target Name="BeforeBuild">
    <Message Text="BEFORE BUILD: IsRebuild: $(IsRebuild)" Importance="High" />
  </Target>
于 2014-07-10T07:38:51.847 に答える