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

时间:2013-11-02 04:30:32

标签: c++ c gcc makefile

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

  

/ ARDrone_SDK_2_0_1 / ARDroneLib /软/

以及头文件的所有子目录。可以这样做吗?这是一个简单的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 $@

1 个答案:

答案 0 :(得分:8)

这个问题有点令人困惑,因为您将两个不同的工具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++编译行。