Makefile 是否有make命令来告诉gcc搜索头文件?
我需要你的帮助,以防止我坐在一个使项目小时 我正在尝试一个更大的.cpp项目。因此,以下是我的文件夹结构:Makefile 是否有make命令来告诉gcc搜索头文件?,makefile,Makefile,我需要你的帮助,以防止我坐在一个使项目小时 我正在尝试一个更大的.cpp项目。因此,以下是我的文件夹结构: myproj | |____Makefile |____main.cpp |____init.cpp |____end.cpp |____init.h |____end.h |____Dependencies |____biggerlib |____bin
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,用于使构建过程适应不同的构建系统,这些工具可以用来扫描您自己的代码库,但为什么呢?你不需要分析你的代码库,因为你可以控制它!您确定没有两个头文件具有相同的名称吗?