53

コードを含むいくつかのディレクトリに分割されたプロジェクト (ライブラリ) があります。プロジェクトのルート ディレクトリにあるヘッダー ファイルを g++ で検索したいので、複数のソース ファイル間で同じヘッダー ファイルの異なるインクルード パスを回避できます。

主に、root/ディレクトリにはサブディレクトリA/と がB/ありC/、そのすべてに.hpp.cppファイルが含まれています。A の一部のソース ファイルにfile.hpp、B にあった を含めたい場合は、次のようにする必要があります#include "../B/file.hpp"。C にあった別のソース ファイルについても同じです。ただし、A 自体に必要なファイルを含むサブディレクトリがある場合file.hpp、一貫性がなく、ファイルを移動することにした場合にエラーが発生します (インクルード パスが になるため"../../B/file.hpp")。

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

編集:ライブラリを使用するすべてのプログラムは、g++ prog.cpp lib.a -o prog. これは、g++ のインクルード パスを永続的に設定することを意味します。

4

4 に答える 4

64

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

もちろん、これを Makefile などに追加することもできます。

于 2012-09-29T15:35:57.783 に答える
28
gcc -I/path -L/path
  • -I /path含めるパス、gcc はこのパスで .h ファイルを検索します

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

于 2012-09-29T15:49:58.153 に答える
1

簡単です。「-B」オプションを使用して、.h ファイルのディレクトリを検索パスに追加します。

例 g++ -B /header_file.h your.cpp -o bin/your_command

于 2014-04-23T23:50:33.773 に答える
0

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

通常、ヘッダーをデフォルトの場所にインストールできる編集を見ました

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

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

于 2012-09-29T15:38:35.990 に答える