33

私は2つの同様の問題を抱えています:

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

Visual Studio でビルドする方法はありますか?

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

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

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

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

プロパティ シートで有望な情報を見つけましたが、.vcproj のファイル タグでマクロを使用している場合、Visual Studio はマクロを展開しません。

この問題を解決する方法についてのアイデアをありがとう。

よろしく、ビクター

4

6 に答える 6

23

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

OutputDirectory="$(MyEnvVariableName)\Bin"

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

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

于 2009-07-14T17:46:59.473 に答える
21

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

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

お役に立てば幸いです...Cyrille

于 2009-05-26T08:37:57.197 に答える
2

b) で説明したことを実現する最善の方法は、プロパティ シートを使用することです。この非常によく似た質問もチェックしてください。

プロパティ シートで有望な情報を見つけましたが、.vcproj のファイル タグでマクロを使用している場合、Visual Studio はマクロを展開しません。

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

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

  • すべてのプロジェクトをソリューションに含めます。
  • たとえば OEM に基づいて、プロジェクトに別の名前を付けます。
  • プロジェクトごとに、ソリューションでリリース構成とデバッグ構成を定義します
  • 「Build->Configuration Manager」では、各構成の「Build」列をチェックまたはチェック解除できます。関連するプロジェクトの「ビルド」を確認します。
于 2009-05-26T08:56:37.050 に答える
1

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

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

この拡張メソッドを使用し、標準のリリース\デバッグだけでなく、ソリューションでカスタム構成を作成することにより、必要に応じて複雑なビルド構成を作成できるはずです。

于 2014-01-28T04:55:05.803 に答える
0

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

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

Common.targets: ChangeThis ...

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

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

于 2009-06-06T21:51:22.753 に答える