在github上看到一个项目,其中lib
目录下的实现文件包含有另一个head
文件夹下的头文件。lib
文件夹和head
文件夹不是同级的文件夹,head
文件夹是另一个文件夹的子文件夹。但是lib
文件夹里面的实现文件直接以#include "head/xx.hpp"
的方式包含着头文件的。想知道为什么可以这样包含,lib
下的实现文件如何能够访问到那个头文件呢?
先谢谢大家了
怪我咯2017-04-17 14:46:52
今回は、gccri の -I
パラメータ、たとえば、head/xxx.h
の場所が /path/to/libs/head にあります。 /xxx.h
、代わりに#include "head/xxx.h"
、以下のパラメータを使用してください:
gcc lib/xxx.c -I/path/to/libs
man gcc
如下:
-I ディレクトリ
検索するディレクトリのリストにディレクトリ dir を追加します。
ヘッダー ファイル。 -I で指定されたディレクトリは、
標準システムにはディレクトリが含まれます。 ディレクトリ dir が
標準システム インクルード ディレクトリでは、オプションは無視されます。
システム ディレクトリのデフォルトの検索順序と、
システムヘッダーの特別な処理も負けません。 ディレクトリの場合
「=」で始まる場合、「=」は sysroot に置き換えられます。
接頭語; --sysroot と -isysroot を参照してください。
ringa_lee2017-04-17 14:46:52
以前に省略されたパス プレフィックスを設定する構成オプションがあるはずです。プロジェクトのクローンを作成し、sublime などを使用して欠落しているパス文字をグローバルに検索すると、どこに設定されているかがわかります。
通常、プログラムを作成するとき、以前の #include
は現在表示されているディレクトリには配置されません。 Linux システムには、C_INCLUDE_PATH
などのいくつかのデフォルトの環境変数があり、これらのパスは、インクルード時にデフォルトで検索されるヘッダー ファイルのパスです。後で独自のパスを追加し続けることができます。
プロジェクトがどのプラットフォームで動作しているかわかりません。Android と同様に、jni をコンパイルするときに、LOCAL_C_INCLUDES を使用してヘッダー ファイルのパスを指定するだけで、長いヘッダー ファイルのパスは省略できます。コード。
Linux システム ヘッダー ファイルの検索パスなどのキーワードを検索して、関連する知識を学ぶこともできます。