ビジュアルc ++:同じソリューションの他のプロジェクトからの#includeファイル


113

Visual C ++を使用してゲームに取り組んでいます。別のプロジェクトにいくつかのコンポーネントがあり、プロジェクトの依存関係を設定しました。別のプロジェクトのヘッダーファイルを#includeするにはどうすればよいですか?あるプロジェクトのクラスを別のプロジェクトで使用する方法がわかりません。

回答:


199

コンパイラの設定

別のプロジェクトからヘッダーファイルを#includeするプロジェクトでは、プロジェクト構成の[ 追加のインクルードディレクトリ]セクションにヘッダーファイルのパスを追加する必要があります。

プロジェクト構成にアクセスするには:

  1. プロジェクトを右クリックし、[プロパティ]を選択します。
  2. 「構成プロパティー」->「C / C ++」->「一般」を選択します。
  3. [追加のインクルードディレクトリ]でパスを設定します。

含める方法

ヘッダーファイル含めるには、コードに次のように記述します。

#include "filename.h"

ここではパスを指定する必要がないことに注意してください。追加のインクルードディレクトリに既にディレクトリが含まれているので、Visual Studioはそれを探す場所を認識します。

プロジェクト設定ですべてのヘッダーファイルの場所を追加したくない場合は、ポイントまでのディレクトリを含め、そのポイントに相対的な#includeを実行することができます。

// In project settings
Additional Include Directories    ..\..\libroot

// In code
#include "lib1/lib1.h"    // path is relative to libroot
#include "lib2/lib2.h"    // path is relative to libroot

リンカの設定

静的ライブラリ(つまり.libファイル)を使用している場合は、リンカ入力にライブラリを追加して、リンク時にシンボルをリンクできるようにする必要があります(そうしないと、未解決のシンボルが表示されます)。

  1. プロジェクトを右クリックし、[プロパティ]を選択します。
  2. [構成プロパティ]-> [リンカー]-> [入力]を選択します。
  3. 追加の依存関係の下にライブラリを入力します。

6
SOに関するこのテーマについての回答を読んだ朝の後で、私が遭遇した中で最も明確で包括的なものであなたのものを言ってください。よくやった、ありがとう!
デビッドホール

9
匿名ユーザーから、「ライブラリのパスを含める場合は、パスにスペースがある場合は引用符で囲んでください」という提案がありました。コメントとしてそれを追加します。
iDev

2
静的ライブラリを含めるもう1つの方法は、ソリューションの「プロジェクトの依存関係」内で、リンク先の静的ライブラリの依存関係になるようにプロジェクトを構成することです。プロジェクトの1つが正しくリンクしている理由を理解するのに長い時間がかかりましたそして、他はそうではありませんでした-これが理由でした。
スチュアートウッド

3
他のプロジェクトのソースファイルディレクトリで「追加のインクルードディレクトリ」を使用するのはひどい考えになることを指摘しておきます。他のプロジェクトには、同じ名前のファイルが含まれている可能性があります(それぞれに事前にコンパイルされたヘッダーを使用している場合)。個人的には、プロジェクトのソースファイルの親フォルダを追加したいので、少なくとも自分で指定できます(例:)#include "proj2\include.h"。ソリューションごとに複数のプロジェクトを使用することは、非常に異なる方法で使用されるため、NET言語に向けられているようです。しかし、C ++プロジェクトでこれを克服するための優れた方法を見つけることはできません。
デジ2014

18
これは少しお粗末です。VSは多くのことを自動的に行うことができます。パスをハードコーディングするよりも優れた解決策がないとは信じがたい-プロジェクトの依存関係の設定などがいいかもしれません。
Cookie

4

#includeプロジェクトとは何の関係もありません-それはプリプロセッサに「ここにヘッダーファイルの内容を置く」ように指示するだけです。正しい場所を指すパスを指定すると(../your_file.hのような相対パスにすることができます)、正しく含まれます。

ただし、そのようなプロジェクトを適切にリンクさせるには、ライブラリー(静的/動的ライブラリー)について学ぶ必要がありますが、それは別の問題です。


3

両方のプロジェクトは同じソリューションの下にあるため、https://docs.microsoft.com/en-us/cpp/build/adding-references-in-visual-cpp-で説明されているように、インクルードファイルとリンカーのより簡単な方法があります。 projects?view = vs-2019

  1. インクルードは相対パス(例:)で記述できます#include "../libProject/libHeader.h"
  2. リンカの場合は、[参照]を右クリックし、[参照の追加]をクリックして、他のプロジェクトを選択します。

ナイスでシンプルですが、ヘッダーを含めるすべての場所で相対パスが必要なのは残念です。
ヨーヨー

2

プロジェクトのプロパティでヘッダーへのパスを設定して、コンパイラーがヘッダーファイルを見つけようとするときにそこを探す必要があります。正確な場所を思い出すことはできませんが、プロジェクトのプロパティを見れば、それが表示されるはずです。


場所は、[プロパティ]> [C / C ++]> [一般]> [追加のインクルードディレクトリ]にあります。
Mustafa Kemal

0

絶対パスでも相対パスでも、#includeディレクティブでの完全なパス参照は避けてください。代わりに、プロジェクト設定に他のプロジェクトのインクルードフォルダーの場所を追加します。必要に応じて、パス参照でサブフォルダーのみを使用します。そうすれば、コードを更新しなくても、物事を移動しやすくなります。


0

@Benavの答えを拡張して、私の推奨するアプローチは次のとおりです。

  1. インクルードパスにソリューションディレクトリを追加します。
    • ソリューションエクスプローラーでプロジェクトを右クリック
    • プロパティを選択
    • ドロップダウンからすべての構成とすべてのプラットフォームを選択します
    • C / C ++>一般を選択します
    • 追加の$(SolutionDir)インクルードディレクトリに追加する
  2. 使用する各プロジェクトへの参照を追加します。
    • ソリューションエクスプローラーでプロジェクトの参照を右クリックします。
    • [参照の追加...]を選択します
    • 参照するプロジェクトを選択します

これで、次のように参照プロジェクトのヘッダーを含めることができます。

#include "OtherProject/Header.h"

ノート:

  • これは、ソリューションファイルが各プロジェクトの1つ上のフォルダーに格納されていることを前提としています。これは、Visual Studioでプロジェクトを作成するときのデフォルトの編成です。
  • これで、ソリューションフォルダーからの相対パスから任意のファイルを含めることができますが、これは望ましくない場合がありますが、アプローチを簡単にするためにこれで十分です。
  • ステップ2はには必要ありません#includeが、正しいビルドの依存関係を設定します。これはおそらく必要です。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.