【问题标题】:How to include multiple header directories in g++ without many -I flags?如何在没有很多 -I 标志的情况下在 g++ 中包含多个头目录?
【发布时间】:2021-11-17 23:01:44
【问题描述】:

我的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++ 递归查找文件。

有人知道我能不能做到吗?也许使用makefile或g++的一些特殊标志...

【问题讨论】:

标签: c++ header g++ flags


【解决方案1】:

您可以将“-Iinclude”添加到 g++ 并包含以下标题

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

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

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

【讨论】:

  • 确实有效,非常感谢。你能想出一些方法来使 *.cpp 部分更好吗?我可以使用目录列表创建一个变量(如SRC_FILES=src/*.cpp src/foo/*.cpp src/bar/*.cpp ...),但这是我一开始就试图避免的。
  • @LucasPaiolla:如果这解决了您的问题,请务必通过单击答案旁边的灰色复选标记将其标记为已接受的答案。这会将您的问题标记为已回答。
  • @LucasPaiolla 没什么好说的。我们通常在项目根目录中有一个 make/cmake,然后在每个 src 目录中都有更多的 cmake 文件。根 cmake 包括所有子目录。无论如何,每个子目录中的 cmake 都必须指定所有本地 .cpp 文件。
  • 谢谢,我想这就是我要做的。
猜你喜欢
  • 2013-09-28
  • 1970-01-01
  • 2022-11-22
  • 1970-01-01
  • 2014-04-10
  • 1970-01-01
  • 2020-06-09
  • 1970-01-01
  • 2015-11-24
相关资源
最近更新 更多