2012-09-29 7 views
26

私は、コードを含むいくつかのディレクトリに細分化されたプロジェクト(ライブラリ)を持っています。プロジェクトのルートディレクトリでヘッダファイルをg ++で検索したいので、複数のソースファイルに渡って同じヘッダファイルの異なるインクルードパスを避けることができます。特定のディレクトリのヘッダファイルをg ++で検索する方法は?

主に、root/ディレクトリは、サブディレクトリ内の.hpp.cppファイルを持っているすべてがA/B/C/を、持っています。 Aの一部のソースファイルにBに入っていたfile.hppを含めるには、#include "../B/file.hpp"のようにする必要があります。しかし、もしA自身にfile.hppが必要なファイルを持つサブディレクトリがあると、ファイルを移動することを決めた場合には矛盾してエラーが発生します(インクルードパスは"../../B/file.hpp"となります) 。

また、root/の外にある他のプロジェクトも同様に作業する必要があります。私はすでにすべての私のヘッダーファイルをデフォルトの検索ディレクトリに手動でコピーするオプションがあることを知っていますが、これは私が記述した方法で行いたいと思います。

編集:ライブラリを使用するすべてのプログラムは、g++ prog.cpp lib.a -o progでコンパイルする必要があります。つまり、が永久に g ++のインクルードパスを設定しています!

答えて

35

A/code.cpp

#include <B/file.hpp> 

A/A/code2.cpp

#include <B/file.hpp> 

コンパイル使用:

g++ -I /your/source/root /your/source/root/A/code.cpp 
g++ -I /your/source/root /your/source/root/A/a/code2.cpp 

編集:

をあなたは環境を使用することができますパスを変更する変数g ++は頭を探すファイル。マニュアルページから:

いくつかの追加の環境変数は、 プリプロセッサの動作に影響します。

CPATH 
    C_INCLUDE_PATH 
    CPLUS_INCLUDE_PATH 
    OBJC_INCLUDE_PATH 

各変数の値は、多くのヘッダー ファイルを探しているPATH、同様に、特殊文字で区切られたディレクトリのリストです。特殊文字「PATH_SEPARATOR」はターゲットに依存し、GCC構築時に決定されます。 Microsoft Windowsベースのターゲットでは、 はセミコロンで、ほとんどの他のターゲットではコロンです。

CPATHは、-Iで指定したように検索するディレクトリのリストを指定しますが、 コマンドラインで-Iオプションを指定したパスの後に指定します。この 環境変数は、どの言語が前処理されているかにかかわらず使用されます。

残りの環境変数は、指定された言語を前処理する場合にのみ適用されます。それぞれは のディレクトリのリストを と指定しているかのように-isystemで指定されているように指定しますが、コマンドラインで-isystemオプションで指定したパスの後に指定します。

これらすべての変数では、空の要素は、現在の作業ディレクトリを検索するようにコンパイラに指示します。空の要素は、 の先頭に表示されます。 またはパスの終わりです。たとえば、CPATHの値が ":/ special/include"の場合、-Iと同じ効果があります。 -I/special/include。

環境変数を変更するにはさまざまな方法があります。 bashの上で、あなたがこれを行うことができますプロンプト:

$ export CPATH=/your/source/root 
$ g++ /your/source/root/A/code.cpp 
$ g++ /your/source/root/A/a/code2.cpp 

あなたはもちろん

+0

ちょっと、私は重要な詳細を一つ残して質問を述べました。 – corazza

+0

@Bane、それはすべてを変更します:-)。私は答えを編集して、より多くのオプションを使用できるようにしました。 – Vikas

+0

それは私が探しているようです。どれくらい正確に編集できますか? (私のライブラリのmakefileのインストールルールに追加する必要のあるCLI命令を使って) – corazza

0

ヘッダをする#include <に含まれているあなたのMakefileなどでこれを追加することができます>すべてのデフォルトのディレクトリで検索されますが、あなたはまた、追加することができます-Iコマンドライン引数を使用して、検索パス内の自分自身の場所。

私はあなたがデフォルトの場所にあなたのヘッダーをインストールすることができ、あなたの編集を見た通常

/usr/local/include 
libdir/gcc/target/version/include 
/usr/target/include 
/usr/include 

はしかし、コンパイラのドキュメントで確認してください。

+0

はい、わかりましたが、編集をご覧ください。 – corazza

+0

上記のインストールはデフォルトの場所に含まれており、迅速な解決が可能です。 – NiladriBose

12
gcc -I/path -L/path 
  • -I /path含まれるようにパス、gccがこのパスで.hファイル

  • -L /pathライブラリファイルが含まれています、.a.s

0

oを、それは簡単です、使用.hファイルのディレクトリを検索パスに追加する "-B"オプション。

など。 g ++ -B /header_file.h your.cpp -o bin/your_command

関連する問題