方法 : ビルドのプロジェクト出力ファイルを編成する

このトピックでは、プロジェクト出力ファイルの編成に関する推奨手順について説明します。プロジェクト出力ファイルの設定を誤ると、ビルド エラーが発生する場合があります。このトピックでは、プロジェクト出力ファイルの編成に対する各代替手段の長所および短所についても説明します。

CLR アセンブリの参照

#using を使用してアセンブリを参照するには

  • #using <System.Data.dll> などの #using ディレクティブを使用し、コードから直接アセンブリを参照できます。詳細については、「#using ディレクティブ (C++)」を参照してください。

    指定するファイルは、MSIL にある限り、.exe、.dll、.netmodule、または .obj のいずれでも使用できます。参照先コンポーネントは、すべての言語でビルドできます。このオプションを使用すると、メタデータが MSIL から抽出されるため、Intellisense にアクセスできるようになります。指定したファイルはプロジェクトのパスに配置する必要があります。配置しないと、プロジェクトはコンパイルされず、Intellisense も使用できません。ファイルがプロジェクトのパスに配置されているかどうかを簡単に確認するには、#using 行を右クリックし、[ドキュメントを開く] コマンドを選択します。ファイルが見つからなかった場合は、そのことが通知されます。

    ファイルへの完全パスを指定しない場合は、/AI コンパイラ オプションを使用し、#using 参照の検索パスを編集できます。詳細については、「/AI (メタデータ ディレクトリの指定)」を参照してください。

/FU を使用してアセンブリを参照するには

  • 既に説明したようにコード ファイルからアセンブリを直接参照するのではなく、/FU コンパイラ オプションを使用できます。この方法の利点は、特定のアセンブリを参照するすべてのファイルに #using ステートメントを個別に追加する必要がないことです。

    このオプションを設定するには、プロジェクトの [プロパティ ページ] を開きます。[構成プロパティ] ノードを展開し、[C/C++] ノードを展開します。次に、[詳細] を選択します。[#using の強制] の横に必要なアセンブリを追加します。詳細については、「/FU (強制 #using ファイルの名前の指定)」を参照してください。

[新しい参照の追加] を使用してアセンブリを参照するには

  1. CLR アセンブリを使用するには、これが最も簡単な方法です。最初に、/clr コンパイラ オプションを使用してプロジェクトがコンパイルされていることを確認します。次に、ソリューション エクスプローラーで、プロジェクトを右クリックし、[追加][参照] の順にクリックします。これにより、[プロパティ ページ] ダイアログ ボックスが表示されます。

  2. [プロパティ ページ] ダイアログ ボックスで、[新しい参照の追加] を選択します。ダイアログには、現在のプロジェクトで使用できるすべての .NET アセンブリ、COM アセンブリ、およびその他のアセンブリの一覧が表示されます。必要なアセンブリを選択し、[OK] をクリックします。

    プロジェクト参照を設定すると、対応する依存関係が自動的に処理されます。さらに、メタデータがアセンブリに含まれているため、ヘッダー ファイルを追加したり、マネージ アセンブリから使用されている要素のプロトタイプを作成したりする必要はありません。

ネイティブ DLL またはスタティック ライブラリの参照

ネイティブ DLL またはスタティック ライブラリを参照するには

  1. #include ディレクティブを使用し、コード内の適切なヘッダー ファイルを参照します。このヘッダー ファイルは、インクルード パスにあるか、現在のプロジェクトに含まれている必要があります。詳細については、「#include ディレクティブ (C/C++)」を参照してください。

  2. プロジェクトの依存関係を設定することもできます。プロジェクトの依存関係を設定することにより、次の 2 点が保証されます。1 つ目は、プロジェクトで必要な依存ファイルが常に見つかるように、プロジェクトが正しい順序でビルドされることです。2 つ目は、ファイルがリンク時に簡単に見つかるように、依存プロジェクトの出力ディレクトリが暗黙的にパスに追加されることです。

  3. アプリケーションを配置するには、適切な場所に DLL を置く必要があります。DLL は、次のいずれかの場所に置くことができます。

    1. 実行可能ファイルと同じパス。

    2. システム パス (path 環境変数) 内の任意の場所。

    3. side-by-side アセンブリ内。詳細については、「C/C++ side-by-side アセンブリのビルド」を参照してください。

複数のプロジェクトの操作

既定では、プロジェクトは、すべての出力ファイルがプロジェクト ディレクトリのサブディレクトリに作成されるようにビルドされます。このディレクトリの名前は、ビルド構成 (Debug、Release など) に基づいて付けられます。兄弟プロジェクトが相互に参照するには、それぞれのプロジェクトのプロジェクト出力ディレクトリのパスに、もう一方のプロジェクトで使用されているパスを明示的に追加し、リンクを正しく機能させる必要があります。プロジェクトの依存関係を設定すると、この操作は自動的に行われます。ただし、依存関係を使用しない場合は、ビルドの管理が非常に難しくなる可能性があるため、この操作は慎重に行う必要があります。たとえば、プロジェクトにデバッグ構成とリリース構成があり、兄弟プロジェクトからの外部ライブラリが含まれている場合は、ビルドされている構成によって異なるライブラリ ファイルを使用する必要があります。したがって、これらのパスのハードコーディングには手間がかかる場合があります。

すべての必要な出力ファイル (実行可能ファイル、インクリメンタル リンカー ファイル、PDB ファイルなど) が共通のソリューション ディレクトリにコピーされます。したがって、同じ構成の C++ プロジェクトを数多く含むソリューションを使用する場合、すべての出力ファイルが集中管理されるため、リンクおよび配置を簡略化できます。同じパスにコピーされた出力ファイルをそのまま保持しておけば、アプリケーションおよびライブラリは期待どおりに動作します。

出力ファイルを稼働環境に配置すると、その場所が大きな問題になる場合があります。IDE 内でプロジェクトを実行している間は、インクルードされるライブラリへのパスが必ずしも稼動環境のパスと一致するわけではありません。たとえば、コード内に #using "../../lib/debug/mylib.dll" と記述しても、mylib.dll を別の相対的な位置に配置すると、アプリケーションでは、実行時エラーが発生します。この問題を回避するには、コード内の #include ステートメントに相対パスを使用しないようにします。また、必要なファイルがプロジェクトのビルド パスにあることと、対応する稼動環境のファイルが適切に配置されていることを確認することをお勧めします。

出力ファイルの出力先を指定するには

  • プロジェクトの出力場所の設定は、プロジェクトの [プロパティ ページ] で確認できます。[構成プロパティ] の隣のノードを展開し、[全般] を選択します。出力場所は、[出力ディレクトリ] の隣に指定されます。詳細については、「[全般] プロパティ ページ (プロジェクト)」を参照してください。

参照

概念

Visual C++ プロジェクトの種類