競合するヘッダの優先順位を設定する方法c ++

2つのディレクトリに2つのsomething.hがあるとします。それらのディレクトリに書き込むことはできず、rootアクセス権も持っていません。

あなたは次のことをするコードを持っています:

#include 

特定のディレクトリでsomething.hをどのように使用して指定し、他のものを無視しますか?

3
nl ru de
ブーム! 20%増加!
追加された 著者 madreblu,

2 答え

一般的には、システムインクルード(#includeの山括弧で囲んでいる)の検索に適格なディレクトリのリストは、コンパイラに -I スイッチのセットとして提供されます。多くの場合、これらのインクルードディレクトリは、メイクファイルまたはプロジェクトファイルで指定されます。

多くの(ただし必ずしもすべてではない)コンパイラは、インクルードディレクトリとしてリストされたディレクトリの順序を尊重するでしょう - したがって、makefileの中でその順序を変更することによって好みを選ぶことができるはずです。しかし、一部のコンパイラでは、いくつかのディレクトリが常に含まれているとみなされるので、難しい場合があります(gccのデフォルトでは、/usr/include が含まれていると仮定します)。 言い換えれば、これは非常に実装固有のものです。

山括弧ではなく二重引用符を使用する場合は、 #include "dir/file.h" のように直接指定することができます。

1
追加された
一つのバージョンは/ usr/include/foo /にあり、もう一つは私のホームディレクトリにあります。私が #include "フルパスをホームディレクトリヘッダー" に指定すると、それでも/ usr/includeを選択します
追加された 著者 madreblu,
はい、そして-Iであっても、/ usr/include/foo/oneを見ています
追加された 著者 madreblu,
/ usr/include/foo /ヘッダーをプログラムに追加する前に、ステートメントを変更しないでください。
追加された 著者 madreblu,
@madreblu -I オプションも試しましたか?
追加された 著者 πάντα ῥεῖ,
@madreblu:.cppファイルの最初の行に #include を使ってみてください。そうでなければ、そのヘッダはその上に別の#が付いてくるかもしれません
追加された 著者 mvp,
あなたは何が起こっているの詳細を教えてください - あなたが見ているものを推測することは非常に困難です。あなたがgccを使っていると仮定すると、これは検索オーダーに関する公式文書です: gcc.gnu。 org/onlinedocs/cpp/Search-Path.html
追加された 著者 mvp,
mvp: -I ディレクトリにリンクされているドキュメントのデフォルトディレクトリに関する注意が優先されます。ただし、 -I フラグを使用してデフォルトディレクトリの順序を並べ替えることはできません。 -nostdinc を使用してすべてのデフォルトを無視し、必要な順序でそれらを -I するか、デフォルト以外のディレクトリに希望のヘッダーをリンクして使用するか -I
追加された 著者 brian,

次の方法を試してください:
#include "../ directory/something.h"
GCCは、検索パスを使用してヘッダーを検索します。
GCCに指定されたディレクトリのヘッダファイルを探すように依頼することもできます。 -iquote dir を使用して、ヘッダファイルを検索するディレクトリリストの先頭に dir ディレクトリを追加します。

1
追加された
私が望む.hへの完全な道を踏み出すことはできません。
追加された 著者 madreblu,
-iquote を使ってみてください。
追加された 著者 bane,
ディレクトリオプションも参照してください。
追加された 著者 bane,