2012-04-12 10 views
3

短い質問はどのようにVisual Studioを使用して、異なるディレクトリにソースコードを持つプロジェクトを作成/コンパイル/実行することができますか?ここで別のディレクトリのヘッダーを含めるとVisual Studioのリンクエラーが発生する

具体的な詳細は以下のとおりです。

私は1つのディレクトリにクラス定義ファイル(.HPP)と実装ファイル(.CPP)を持っていると私は別のディレクトリにあるmain.cppにファイルを持っています。 Visual Studio 2008では、新しいプロジェクトを作成し、そのプロジェクトにmain.cppを配置しました。追加のインクルードディレクトリにクラスファイルディレクトリを追加しました(プロジェクト - >プロジェクトプロパティ - >設定プロパティ - C/C++ - 一般 - >追加インクルードディレクトリ= C:\ Test \ cpp)。

これを行うと、intellisenseはmain.cppを編集するときに正常に動作します。私はプロジェクトをビルドすると、それが正常にコンパイルが、私のようなリンクエラーを取得:

がエラーLNK2019:未解決の外部シンボル?「パブリック:int型__thiscallテスト::(int)を追加し、」(テスト@追加します@@ QAEHH @ Z)を参照してください。

Visual Studioは実際にはTest.cppをコンパイルしていません(私には作成されている.objファイルはありません)。コンパイル/ビルドmain.cppの前に、私はそれをコンパイルしようとしましたが、それは何の違いもありませんでした。これを回避する方法はありますか?ウェブで回答を検索すると、多くの人がリンカーにライブラリを含めるのを忘れていますが、私はライブラリを扱っていません。

このコードは、Test.hppとTest.cppをmain.cppと同じディレクトリに移動することでコンパイルと実行が正常に実行されたことを確認しました。これは問題なく動作しました。私はちょうどその設定に固執するが、私は私が取り組んでいるプロジェクトのために別のディレクトリからのソースを使用できるようにする必要があります。

  1. C:\テスト\ CPP \ Test.hpp

    #ifndef TEST_H 
    #define TEST_H 
    
    class Test 
    { 
    private: 
        int mynum; 
    
    public: 
        Test(); 
        int add(int num); 
    
    }; 
    #endif //TEST_H 
    
  2. C:\テスト\ CPP \ Test.cppの

    #include "Test.hpp" 
    
    Test::Test() 
    { 
        mynum = 0; 
    } 
    
    int Test::add(int num) 
    { 
        return mynum += num; 
    } 
    
  3. ここ

    は、3つのファイルがあります

  4. C:\ Visual Studio Projects \ MyProject \ main.cpp

    #include <iostream> 
    #include <Test\Test\Test.hpp> 
    
    int main(int argc, char *argv[]) 
    { 
        Test test; 
        std::cout << "Add 5 = " << test.add(5) << std::endl; 
        return 0; 
    } 
    

答えて

5

結論は、Test.cppをコンパイルして何らかの形でリンクする必要があることです。二つのオプション:

  1. は、ライブラリプロジェクトを作成します
  2. プロジェクトにTest.cppの追加、TESTLIBを言います。 Test.cppをそのプロジェクトに追加し、コンパイルします。次にメインプロジェクトをTestLibにリンクします。

2番目のケースでは、VisualStudioで依存プロジェクトを作成できます。これにより、適切なDebug/Release/etcを適切に引き出すことができます。あなたのメインプロジェクトをビルドするときのlibのバージョン。また、正しいフォルダから取得します。例えば。手動でリンカ設定を混乱させる必要はありません。

0

プロジェクトにTest.hTest.cppを追加します(あなただけのエクスプローラからファイルをドラッグすることができるはずです)。

追加のインクルードディレクトリも指定する必要がありますが、すでにソートされているようです。

+0

私が言及したように、私はTest.hppとTest.cppをこの単純なもののためにプロジェクトに追加することができましたが、それほど簡単ではない他のプロジェクトもあります。たとえば、サーバー/中央ソース管理リポジトリに格納されているコードを使用するローカルマシン上のプロジェクトを作成します。 –

+0

あなたはまた、「私はどのライブラリも扱っていません」と述べました。複数のプロジェクトでコードを再利用したい場合は、dpiskyulevのように共通コードを.dllまたはライブラリとしてコンパイルすることをお勧めします。 –

+0

複数のディレクトリから1つのプロジェクトにインポートするのを止めるには何もありません。それは、「私はその設定に固執しますが、私が作業しているプロジェクトに異なるディレクトリのソースを使用できる必要があります。 。プロジェクト設定でディレクトリを入力するときに、ディレクトリ間に ';'を付けるだけです。 –

関連する問題