如何正确包含来自不同目录的许多 headers?

How to right include many headers from different directories?

我有一个使用一个已安装库的小程序,在树视图中它看起来像:

`-main.c`
`-include/include.h`
`-makefile`

我这样编译:

gcc $(CFLAGS) -I/usr/include/xlsxwriter -L/usr/lib64/ -lxlsxwriter -o $@ $(OBJS)

但是我在从 include 目录添加 include.h 时遇到了一些麻烦。 我试过这个,但它不起作用:

gcc $(CFLAGS) -I/usr/include/xlsxwriter include/ -L/usr/lib64/ -lxlsxwriter -o $@ $(OBJS)

main.c 包含:

#include <xlswriter.h>
#include "include.h"

如何将我自己的 include.h 文件包含到编译器选项中?

正如所指出的,对于要添加到环境中的每个包含路径,您确实需要一个 -Ipath,但在您的情况下,您确实不需要使用包含搜索路径。包含搜索路径应该只真正用于多个项目之间共享的目录。

在源文件中使用显式“#include”include/include.h。项目本地包含路径通常不会通过构建环境添加。这是一种不好的做法,因为可能有 include.h 文件在较早的包含路径条目中,您显然想要本地包含目录中的文件。它还会减慢您的构建速度,因为编译器可能会在找到您的目标 header 之前搜索多个路径。

使用构建环境仅指向 system/global 共享包含目录。

另请参阅:Why create an include/ directory in C and C++ projects?