我可以搜索目录及其子目录中的头文件吗?

15

如何让 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 $@

我已经让它自动工作了,看这里:https://dev59.com/aVwX5IYBdhLWcg3wjwJZ#59621930 - Andrew
1个回答

20

这个问题有点混淆,因为你把两种不同的工具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++编译器到编译命令行中。


好的,那很有道理。谢谢。 - Nick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接