プロジェクト(ライブラリ)は、コードが含まれるいくつかのディレクトリに分割されています。プロジェクトのルートディレクトリでヘッダーファイルをg ++で検索したいので、複数のソースファイル間で同じヘッダーファイルの異なるインクルードパスを避けることができます。
主に、root/
ディレクトリにはサブディレクトリA/
、B/
、およびC/
があり、すべてのサブファイルには.hpp
および.cpp
ファイルがあります。 Aのソースファイルに、Bにあるfile.hpp
を含めたい場合は、#include "../B/file.hpp"
のようにする必要があります。 Cにある別のソースファイルについても同じです。ただし、A自体にfile.hpp
が必要なファイルを含むサブディレクトリがある場合、ファイルを移動しようとすると一貫性がなくなり、エラーが発生します(インクルードパスのため) "../../B/file.hpp"
)。
また、これはroot/
の外部にある他のプロジェクトからも動作する必要があります。すべてのヘッダーファイルを既定の検索ディレクトリに手動でコピーするオプションがあることは既に知っていますが、これを説明した方法でやりたいと思います。
編集:ライブラリを使用するすべてのプログラムは、g++ prog.cpp lib.a -o prog
でのみコンパイルする必要があります。つまり、永続的にg ++のインクルードパスを設定します!
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 ++がヘッダーファイルを探すパスを変更できます。 manページから:
いくつかの追加の環境変数は、プリプロセッサの動作に影響します。
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
もちろん、これをMakefileなどに追加できます。
gcc -I/path -L/path
-I /path
含めるパス。gccはこのパスで.hファイルを見つけます。
-L /path
にはライブラリファイルが含まれます、.a
、.s
o
簡単です。「-B」オプションを使用して、.hファイルのディレクトリを検索パスに追加します。
例えば。 g ++ -B /header_file.h your.cpp -o bin/your_command
#include <>でインクルードされるヘッダーは、すべてのデフォルトディレクトリで検索されますが、-Iコマンドライン引数を使用して、検索パスに独自の場所を追加することもできます。
通常、デフォルトの場所にヘッダーをインストールできる編集を見ました
/usr/local/include
libdir/gcc/target/version/include
/usr/target/include
/usr/include
ただし、コンパイラのドキュメントで確認してください。