0

重複の可能性:
C ヘッダー インクルード パスにディレクトリを追加するにはどうすればよいですか?

私はこの問題に何度か遭遇しましたが、経験豊富な C または C++ プログラマーから説明を受けるとよいと思いました。以下の例では、サンプル ライブラリ名を使用していますが、実際の名前は何でもかまいません。

次の MWE を実行したいとします。

#include <stdio.h>
#include <mylib/mylib.h> /* Also try mylib2/mylib/mylib.h */

int main (int argc, char **argv) {
    printf ("Hello, World!\n");
    return 0;
}

mylib.hさらに、 に配置する代わりに/usr/include/mylib/、ディレクトリを選択する Linux ディストリビューションがあるとし/usr/include/mylib2/mylib/ます。したがって、簡単なコマンドは次のとおりです。

$ gcc test.c

エラーで失敗します:

fatal error: mylib.h: No such file or directory

しかし、次のように記述して、include ステートメントを修正しようとするかもしれません。

#include <mylib2/mylib.h>

これにより、最初のエラーを回避できます。ただし、内部的にmylib.hは、「通常の」方法で他のヘッダー ファイルを参照します: #include <mylib/anotherheader.h>. #include <mylib2/mylib/mylib.h>そのため、MWE の元の include ステートメントを修正した後でも、mylib.h#include <mylib/anotherheader.h>代わりに#include <mylib2/mylib/anotherheader.h>.

この問題を回避する標準的な方法は何ですか? 私が見逃している単純なコンパイルフラグが必要です。前もって感謝します。

4

3 に答える 3

3

を含むようにインクルード パスを設定します/usr/include/mylib2。通常は、コンパイラのようなコマンド ライン オプションを使用します-I/usr/include/mylib2

通常、ヘッダーには、同じパッケージの関連ファイルが含まれていることに注意してください。

#include "another.h"

インストールされている場所からの相対パスで最初に検索されるようにします。ライブラリがこれを行っていれば、問題はありません

#include <mylib2/mylib/mylib.h>

ただし、その場合でも、使用するライブラリがインストールされている場所にコードを依存させたくありません。その依存関係はビルド システムに保持する必要があります。

于 2012-09-03T18:47:23.963 に答える
1

gcc および g++ の -I コンパイラ フラグを参照してください。追加のインクルード パスを指定できます。

http://gcc.gnu.org/onlinedocs/cpp/Search-Path.html

この場合、次のように指定できます。 -I /usr/include/mylib2

および #include "mylib/mylib.h" をどこにでも

また、これはあなたの質問の一部ではありませんが、とにかくそこに投げ込むと思いましたが、引用符付きの include ステートメントと山かっこの間にはわずかな違いがあります: http://msdn.microsoft.com/en-us/ライブラリ/36k2cdd4(v=vs.80).aspx

于 2012-09-03T18:47:18.040 に答える
1

次のパターンをお勧めします。

/usr/libs/lib15 - ライブラリが存在するディレクトリです。

コード内:

#include <stdio.h>
#include <mylib1.h>            // Header from your lib.
#include <mylib2.h>            // Other header from your lib.
#include <mygraphs/defines.h>  // Headers in your lib have even subdirectories.

コマンドラインで:

cl -I /usr/libs/lib15 .....

ヘッダーの検索パスを指定します。

于 2012-09-03T18:46:28.373 に答える