如何在没有许多 -I 标志的情况下在 g++ 中包含多个头目录?

How to include multiple header directories in g++ without many -I flags?

我的 include 文件夹下有一个包含多个子文件夹的项目。例如:

include/
|-- foo/
    |-- foo_header1.h
    \-- foo_header2.h
|-- bar/
    |-- bar_header1.h
    \-- bar_header2.h
|-- root_header1.h
\-- root_header2.h
src/
|-- foo/
    |-- foo_source1.cpp
    \-- foo_source2.cpp
|-- bar/
    |-- bar_source1.cpp
    \-- bar_source2.cpp
|-- root_source1.cpp
|-- root_source2.cpp
\-- main.cpp

目前我的Makefile是:

all:
    g++ -Iinclude/ -Iinclude/foo -Iinclude/bar -o main src/*.cpp src/foo/*.cpp src/bar/*.cpp

我想要一种使该命令“更智能”的方法,因此我不会对源代码中的所有文件夹进行硬编码并包含目录(我的项目可能会有很多文件夹)。我只是想要一些方法来指定根头目录并使 g++ 递归地找到文件。

有人知道我能不能做到吗?也许使用 g++...

的 makefile 或一些特殊标志

您只需将“-Iinclude”添加到 g++ 并包含 headers 如下

#include <foo/foo_header1.h>
#include <bar/bar_header2.h>

这也消除了在 header 文件名中使用 foo/bar 前缀的需要。重命名后,上面简化为如下

#include <foo/header1.h>
#include <bar/header2.h>