在单独的文件夹中使用源代码和头文件构建 makefile

Posted

技术标签:

【中文标题】在单独的文件夹中使用源代码和头文件构建 makefile【英文标题】:Build makefile with source and header in separate folder 【发布时间】:2016-04-08 12:53:54 【问题描述】:

我正在尝试为我的源代码和标题构建一个带有单独文件夹的 Makefile。我有一个项目的根目录,其中包含一个包含我的 .hpp 文件的包含文件夹,以及一个包含我的 .cpp 文件的源文件夹。我如何构建 Makefile,它使用相应的 .hpp 文件构建所有 .cpp ?

如何在名为 build 的文件夹中创建程序输出?

提前谢谢你

【问题讨论】:

【参考方案1】:

Make 是如此多样化,有很多方法可以做到这一点,但最终结果是 -I<your hpp path>(或 -J)需要传递给编译器以告诉它在解析 #include 时要搜索的其他包含路径

路径需要相对于规则目录的调用,或者相对于文件(我很确定编译器会搜索两者)。

许多 makefile 使用 CPPOPTS 和 CCOPTS 或 makefile 中的一些变体来将额外的选项传递给 C 或 CPP 编译器。尝试添加:

CPPOPTS += -I..\include

到你的makefile(假设你已经隔离了你的源代码并以这种方式包含文件)。

同样,这完全取决于您的 makefile。

【讨论】:

Google 为CPPOPTS 提供了 1590 次点击,为CPPFLAGS 提供了 360000 次点击。因此,相对而言,使用 CPPOPTS 的 makefile 并不多。【参考方案2】:

我正在尝试为我的源代码和标题构建一个带有单独文件夹的 Makefile。

另一种方法是将标题与.cpp 文件放在同一目录中。在***包含文件夹中,您可以将符号链接放置到标题中。

【讨论】:

我认为这个解决方案会因为符号链接而无法添加到大多数版本控制系统中,所以我不推荐它。然而,我所做的一件非常骇人听闻的事情是添加一个本地 .h 文件,该文件仅包含使用已知相对路径的非本地文件。我只在极少数情况下这样做,这与避免干扰已经存在的 makefile 但需要在两个项目之间共享源/头文件有关。同样,我不建议这样做。使用-I-J

以上是关于在单独的文件夹中使用源代码和头文件构建 makefile的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 autotool 在单独的目录中构建

使用 Linux C 代码和头文件编译 Windows DLL

#include <glad/glad.h>: 没有这样的文件或目录(即使源代码和头文件在同一个目录中)

一点一点学写Makefile-增加第三方库和头文件

使用CMake构建复杂工程

编写一个通用的Makefile文件