【问题标题】:Is there any make command, to tell the gcc to search for header files?是否有任何 make 命令来告诉 gcc 搜索头文件?
【发布时间】:2019-09-06 00:16:43
【问题描述】:

我需要你的帮助,以防止我在制作项目上花费数小时。

我正在尝试一个更大的 .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 的错误警告,因为它无法在我的子文件夹结构中找到我的头文件。 所以我不得不将它们自己绑定到我的makefile中。 这工作量太大了,所以我希望你能帮我找到一个解决方案,告诉 gcc 在 Dependencies/biggerlib 文件夹后面实现所有头文件。

感谢大家的帮助!!

【问题讨论】:

  • 不,make 本身无法搜索任何内容。当然,有一些方法可以编写和安排源代码和 makefile,以简化向编译器表达头文件路径,而这正是您应该做的。还有一些工具,例如 Autoconf 和 CMake,旨在使构建过程适应不同的构建系统,这些可以用于扫描您自己的代码库,但为什么呢?您无需分析代码库,因为您可以控制它!
  • 你确定没有两个头文件同名吗?

标签: makefile


【解决方案1】:

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

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

一旦完美运行,您可以在您的 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

一旦完美运行,您可以使用dir 删除文件名并使用sort 删除冗余:

INC_DIRS := $(sort $(dir $(HEADERS)))
$(info $(INC_DIRS))

这应该产生:

Dependencies/biggerlib/include/biggerLib/ Dependencies/biggerlib/somewhereElse/

一旦完美运行,您可以告诉 Make 在这些目录中搜索头文件作为先决条件:

vpath %.h $(INC_DIRS)

和/或告诉编译器搜索要包含的头文件:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-15
    • 2011-11-09
    • 1970-01-01
    • 1970-01-01
    • 2015-10-31
    • 2016-06-10
    相关资源
    最近更新 更多