创建包含仅标头库的生成文件

Creating a Makefile that includes a header only library

本文关键字:文件 包含仅 创建      更新时间:2023-10-16

这是我的第一个 c++ 程序,也是我第一次创建 Makefile,所以我对这一切非常陌生。

我有我的主文件光线追踪器.cpp其中包括如下所示的 glm 库:

#include "glm/glm.hpp"

光线追踪器.cpp和 GLM 目录位于同一目录中。

如何为此项目创建生成文件?

glm 库是仅标头库。那么我必须编译 glm 目录中的所有文件吗?或者只是glm.hpp?

如果,并且仅当所有代码都在标头中并且没有在相应的源中定义任何内容时,您才不必在 Makefile 中指定任何内容,而是指定光线跟踪器的规则.cpp。标头代码将自动插入 include 语句所在的位置。仅当您需要包含其他对象或共享对象(.so .a 等中的库)时,才需要指定它)

有关如何创建简单makefile的更多信息,请参阅此处:如何使SIMPLE C++Makefile?

如果你有一个raytracer.cpp文件是你的应用程序和一些(本地)头文件,你需要的唯一makefile内容(这只是为了在头文件更改时重建你的二进制文件)是。

raytracer: raytracer.hpp glm/glm.hpp

就是这样。

只需创建Makefile并运行make raytracer即可。(您也可以在不创建Makefile的情况下运行它,但如果只有标头更改,则 make 将不知道重建二进制文件。

如果您需要任何特殊标志/等,您可以使用内置的 make 变量设置它们。如CFLAGSLDFLAGSLDLIBSCPPFLAGS等。

有关

列表,请参阅手册中的 10.3 隐式规则使用的变量以及有关它们的更多信息。

midor 链接到的票证上接受的答案也包含许多有用的信息。