我可以在目录和子目录中搜索头文件吗?

Posted

技术标签:

【中文标题】我可以在目录和子目录中搜索头文件吗?【英文标题】:Can I search directory and subdirectories for header files? 【发布时间】:2013-11-02 04:30:32 【问题描述】:

是否可以指示 g++ 在文件夹中递归搜索头文件?在我的示例中,我希望 g++ 进行搜索

/ARDrone_SDK_2_0_1/ARDroneLib/Soft/

以及头文件的所有子目录。这可以做到吗?这是一个简单的Makefile 示例:

C=g++
CFLAGS=-c -Wall
LDFLAGS=
INC1=/ARDrone_SDK_2_0_1/ARDroneLib/Soft/ <- can this be recursive?
INCDIRS= -I$INC1
SOURCES=src/dronevid.cpp
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=build/dronevid

all: $(SOURCES) $(EXECUTABLE)

$(EXECUTABLE): $(OBJECTS) 
    $(CC) $(LDFLAGS) $(OBJECTS) -o $@

.cpp.o:
    $(CC) $(CFLAGS) $(INCDIRS) $< -o $@

【问题讨论】:

我让它自动工作了,见这里:***.com/a/59621930/1599699 【参考方案1】:

这个问题有点令人困惑,因为您将两个不同的工具混为一谈,makeg++

没有办法让g++搜索给定目录的所有子目录。您要用于查找包含文件的每个目录都必须在命令行上使用-I 标志单独指定。

如果你愿意,你可以得到make 来构造这些参数并将它们放在你的命令行上。假设您使用的是 GNU make,以及支持 find 命令的类 UNIX 系统,您可以执行以下操作:

INCDIRS := $(addprefix -I,$(shell find /ARDrone_SDK_2_0_1/ARDroneLib/Soft -type d -print))

我应该提前说,这不是一个好主意。你不知道这些目录会以什么顺序显示,也不知道不同目录中是否存在同一个头文件的多个副本可能会导致问题。

通常,子目录中的头文件的工作方式是将***目录添加到编译行,然后在代码中的#include 行中使用相对路径。比如:

#include <subdir/subsubdir/header.h>

然后添加:

-I/top/level/dir

g++ 编译行。

【讨论】:

好的。这就说得通了。谢谢。

以上是关于我可以在目录和子目录中搜索头文件吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何让g ++搜索特定目录中的头文件?

WINDOWS操作系统下的C语言头文件存放在哪个目录中?

公共头文件路径、安装目录、搜索头文件路径和其他噩梦

如何在makefile中指定头文件目录

减少搜索头文件的目录数[转]

GCC的头文件搜索路径