我有一个带有 foo.h
、bar()
、baz()
函数的标头 qux()
。我应该在哪里复制它/我必须做什么才能将它包含在 C 程序中,如其他系统范围的头文件,如 stdio.h、unistd.h 等?
在 Linux/POSIX 系统上安装 C 头文件 2.3 搜索路径
•
问答
zhibudao 回答:在 Linux/POSIX 系统上安装 C 头文件 2.3 搜索路径
来自 the GCC documentation(我假设您正在使用 GCC,因为您包含了 Linux 标签):
2.3 搜索路径
GCC 在几个不同的地方寻找标题。在一个普通的 Unix 系统上,如果你不另外指示它,它会寻找用 #include 请求的头文件:
/usr/local/include
libdir/gcc/target/version/include
/usr/目标/include
/usr/include
[...] 在上面,target 是 GCC 被配置为编译代码的系统的规范名称;通常但不总是与它运行的系统的规范名称相同。 version 是正在使用的 GCC 版本。
所以这主要回答了您的问题。但实际上,您可能不应该将非系统标头放在 /usr/include
之类的地方。大多数情况下,最好将程序的标题保存在项目的 include
子目录中。然后告诉 GCC 如何找到这些文件,如下所示:
您可以使用 -Idir
命令行选项添加到此列表中。在默认目录之前按从左到右的顺序搜索所有以 -I
命名的目录。唯一的例外是默认情况下已经搜索了 dir
。在这种情况下,该选项将被忽略,系统目录的搜索顺序保持不变。
[...]
还要记住 #include "file.h"
和 #include <file.h>
之间的区别
GCC 首先在包含当前文件的目录中查找使用 #include "file"
请求的标头,然后在 -iquote
选项指定的目录中查找,然后在相同的位置查找请求的标头带尖括号。例如,如果 /usr/include/sys/stat.h
包含 #include "types.h"
,GCC 首先在 types.h
中查找 /usr/include/sys
,然后在其通常的搜索路径中。
[...]