web-dev-qa-db-ja.com

Visual Studioの.slnおよび.vcprojファイル内のマクロ/環境変数

同様の問題が2つあります。

a)複数のプロジェクトを含むソリューションがあり、環境変数/マクロを設定してプロジェクトの場所を簡単に切り替えられるようにしたい。例として、このプロジェクトは\ SolutionDir\Dir1 \または\ SolutionDir\Dir2 \に配置できるため、\ SolutionDir\$(Var)に配置するように指定し、変数を設定します。

Visual Studioでそれを行う方法のビルドはありますか?

私は現在2つの解決策しか知っていません-.slnファイルを手動で/プログラムで編集してこのプロジェクトを見つけ、正しいパスを設定します。

.slnファイルで環境変数を使用できませんでした。

b)リソース(.rcおよび.h)ファイルを含むプロジェクトがあります。他の環境変数またはマクロを使用してそれらの場所を設定できるようにしたい。

\ ProjectDir\$(Var2)\ resource.rcのようなもの

プロパティシートで有望な情報が見つかりましたが、.vcprojのFileタグでマクロを使用していると、Visual Studioはマクロを展開しません。

この問題を解決するためのアイデアをありがとうございます。

よろしく、ビクター

31
Victor Ronin

関連するフィールドで環境変数を使用するだけです。

OutputDirectory="$(MyEnvVariableName)\Bin"

1つのトリックは、変数を変更するたびにVisual Studioを再起動する必要があることですIDE.

これに関する正確なMSDNの記事があります: 方法:ビルドで環境変数を使用する

21
Rom

私はあなたと同じ目標を持っていると思います。環境変数を使用して、ソリューションファイル(.sln)内のいくつかのプロジェクトを見つけ、プロジェクト内のいくつかのファイルを見つけるためにいくつかの環境変数を使用します。

私はそれを行う方法を見つけました(Visual Studio 2005を使用して)それは正常に機能します:-テキストエディターで.slnファイルを編集し、次の構文%MyEnvironmentVariable%で環境変数を使用します-.vcprojファイルを編集して置き換えます次の構文$(MyEnvironmentVariable)を使用して、いくつかの変数を含む目的のファイルへのパス。

それが役に立てば幸い... Cyrille

19
Cyrille

B)で説明したことを実現する最良の方法は、プロパティシートを使用することです。これもチェックしてみてください 同様の質問

プロパティシートで有望な情報が見つかりましたが、.vcprojのFileタグでマクロを使用していると、Visual Studioはマクロを展開しません。

使用しているVSのバージョンがわかりません。 VS2008では、たとえば、「$(OpenCVInclude)\ cxcore\include」のようなインクルードディレクトリを定義できます。いつも使っています。 OpenCVIncludeは、プロパティシートで定義されたマクロです。

質問a)に関しては、あなたが望むことを行うための「クリーン」な方法はないと思います。別の方法として、構成マネージャーを使用できます。

  • ソリューションにすべてのプロジェクトを含めます。
  • たとえばOEMに基づいて、プロジェクトに別の名前を付けます。
  • プロジェクトごとに、ソリューションのリリースおよびデバッグ構成を定義します
  • 「ビルド->構成マネージャー」では、各構成の「ビルド」列をオンまたはオフにすることができます。関連プロジェクトの「ビルド」を確認します。
2

C++プロジェクトだけを構築しているか、C#\ VBプロジェクトも構築しているかはわかりませんが、Visual Studioの優れた点の1つは、すべてのプロジェクトが実際にはMSBuildプロジェクトだけであることです。テキストエディタでプロジェクトを編集すると、プロジェクトの最後に.targetsファイルがインポートされることがわかります。追跡してインポートに従うと、ほとんどすべてのVSプロジェクトがMicrosoft.Common.Targetsをインポートすることがわかります。 Microsoft.Common.Targetsは、Custom.Before.Microsoft.Common.Targetsをインポートします。このインポートを使用すると、独自のカスタムアクションを含む独自のターゲットファイルをインポートできます。

たとえば、ソリューション内のすべてのプロジェクトにわたって定義された共通のプロパティを持つターゲットファイルと、各プロジェクトのビルドの最後に処理するカスタムポストビルドイベントがあります。

この拡張メソッドを使用し、標準のrelease\debug以外にソリューションでカスタム構成を作成することで、必要に応じて複雑なビルド構成を作成できます。

1
mageos

(a)キリルは、あなたが求めたものに対して適切な解決策を提供します。もう1つの方法は、変更可能な設定を1つの共通の場所に保持することです。これは* .slnや* .vcproj(VS 2010まで)などの非msbuildファイルでは機能しないことに注意してください。

プロジェクトファイル:... $(ChangeableDir)\ foo.cs

Common.targets:ChangeThis ...

しかし、これは物事を行うための素晴らしい方法だとは思いません。構築しているものの違いが機能の大きな部分である場合は、ソース管理システムにブランチを作成することを検討する必要があります。 OTOH、違いが小さい場合(ハードコードされた文字列など)、これは2番目の質問につながります...

(b)あなたが説明するリソース管理の種類は、プロジェクトを異なる言語にローカライズする人々が直面する本質的に同じ問題です。幸い、2005年以降、直接サポートがVisual Studioに組み込まれています。 Visual Studio 2008のローカリゼーション のような以前の質問を確認してください。

0
Richard Berg