Makefile 是否有make命令来告诉gcc搜索头文件?

Makefile 是否有make命令来告诉gcc搜索头文件?,makefile,Makefile,我需要你的帮助,以防止我坐在一个使项目小时 我正在尝试一个更大的.cpp项目。因此,以下是我的文件夹结构: myproj | |____Makefile |____main.cpp |____init.cpp |____end.cpp |____init.h |____end.h |____Dependencies |____biggerlib |____bin

我需要你的帮助,以防止我坐在一个使项目小时

我正在尝试一个更大的.cpp项目。因此,以下是我的文件夹结构:

myproj
  |
  |____Makefile
  |____main.cpp
  |____init.cpp
  |____end.cpp
  |____init.h
  |____end.h
  |____Dependencies
           |____biggerlib
                   |____bin   
                   |____include
                           |____biggerLib1
                           |____biggerLib2
                           |____biggerLib
                                   |____biggerLibrary.h
                                   |____Lib2.h
                                   |____Lib3.h
                                   |____AnotherDirWithFiles1
                                   |____AnotherDirWithFiles2
                                   |____AnotherDirWithFiles3
                                                |____etc.
                   |____src
                   |____makestuff
                           |____...
                           |____...
                                   |____...
                           |____...
                   |____codestuff
                           |____...
                           |____...
                                   |____...
                           |____...
                   |____datastuff
                           |____...
                           |____...
                                   |____...
                           |____...
                   |____Examples
                           |____...
                           |____...
                                   |____...
                           |____...
                   |____etc. 
我想你现在可以想象我的文件夹结构了

所以到目前为止,gcc总是发出错误警告,因为它在我的子文件夹结构中找不到我的头文件。 因此,我不得不将它们自己绑定到我的Make文件中。 这项工作太多了,所以我希望您能帮助我找到一个解决方案,告诉gcc实现Dependencies/biggerlib文件夹后面的所有头文件


谢谢你的帮助

试试这个。首先,查找头文件:

find Dependencies/biggerlib -name "*.h"
这应产生:

Dependencies/biggerlib/include/biggerLib/biggerLibrary.h
Dependencies/biggerlib/include/biggerLib/Lib2.h
Dependencies/biggerlib/include/biggerLib/Lib3.h
Dependencies/biggerlib/somewhereElse/anotherLib.h
Dependencies/biggerlib/include/biggerLib/biggerLibrary.h Dependencies/biggerlib/include/biggerLib/Lib2.h Dependencies/biggerlib/include/biggerLib/Lib3.h Dependencies/biggerlib/somewhereElse/anotherLib.h
Dependencies/biggerlib/include/biggerLib/ Dependencies/biggerlib/somewhereElse/
一旦工作正常,您可以在makefile中放置一行代码来捕获它:

HEADERS := $(shell find Dependencies/biggerlib -name "*.h")
$(info $(HEADERS))
这应产生:

Dependencies/biggerlib/include/biggerLib/biggerLibrary.h
Dependencies/biggerlib/include/biggerLib/Lib2.h
Dependencies/biggerlib/include/biggerLib/Lib3.h
Dependencies/biggerlib/somewhereElse/anotherLib.h
Dependencies/biggerlib/include/biggerLib/biggerLibrary.h Dependencies/biggerlib/include/biggerLib/Lib2.h Dependencies/biggerlib/include/biggerLib/Lib3.h Dependencies/biggerlib/somewhereElse/anotherLib.h
Dependencies/biggerlib/include/biggerLib/ Dependencies/biggerlib/somewhereElse/
一旦工作正常,您可以使用
dir
删除文件名,使用
sort
删除冗余:

INC_DIRS := $(sort $(dir $(HEADERS)))
$(info $(INC_DIRS))
这应产生:

Dependencies/biggerlib/include/biggerLib/biggerLibrary.h
Dependencies/biggerlib/include/biggerLib/Lib2.h
Dependencies/biggerlib/include/biggerLib/Lib3.h
Dependencies/biggerlib/somewhereElse/anotherLib.h
Dependencies/biggerlib/include/biggerLib/biggerLibrary.h Dependencies/biggerlib/include/biggerLib/Lib2.h Dependencies/biggerlib/include/biggerLib/Lib3.h Dependencies/biggerlib/somewhereElse/anotherLib.h
Dependencies/biggerlib/include/biggerLib/ Dependencies/biggerlib/somewhereElse/
一旦工作正常,您可以告诉Make先在这些目录中搜索头文件:

vpath %.h $(INC_DIRS)
和/或告诉编译器搜索头文件以包括:

$(CCX) $(addprefix -I, $(INC_DIRS)) ...

不,
make
本身没有搜索任何东西的功能。当然,有一些方法可以编写和排列源代码和生成文件,以便于向编译器表达头路径,但这正是您应该做的。还有一些工具,如Autoconf和CMake,用于使构建过程适应不同的构建系统,这些工具可以用来扫描您自己的代码库,但为什么呢?你不需要分析你的代码库,因为你可以控制它!您确定没有两个头文件具有相同的名称吗?