当两个头文件在c++中相互包含时,如何编写makefile
how to write makefile when two header files include eachother in c++?
我最近开始学习如何编写makefile,我有一个问题,对我来说似乎有一个简单的答案。当两个头文件相互包含时,我们如何编写makefile ?我一直在寻找这个问题的答案,但一无所获。(我希望makefile的内容尽可能简单)
最初,只关注Makefile问题:
对象依赖于源文件…在编译期间读取的所有源文件(和头文件)上…除非您正在进行代码生成,否则用于生成特定对象的源/头文件之间没有makefile依赖关系。
例如:foo.cpp.
foo.cpp将生成foo.o
你的目标是foo。噢,那得看foo.cpp了。
foo.o: foo.cpp
现在,如果foo.cpp包含一个header bar.hpp,你可以添加它作为一个依赖项(例如,如果bar.hpp改变了你想要的foo. hpp)。(要重新编译),然后将其添加到依赖项列表中:
foo.o: foo.cpp bar.hpp
现在,如果bar.hpp包含rec.hpp,我们也会这样做。
foo.o: foo.cpp bar.hpp rec.hpp
如果rec.hpp包含bar.hpp,你不需要把它添加到依赖项中,因为它已经存在了。
注意,我们没有foo.cpp对bar.hpp的依赖,也没有bar.hpp对rec.hpp的依赖,因为foo.cpp的生成是由bar.hpp生成的。O目标只涉及一个步骤,读取所有三个文件。
在C/c++预处理器级别,包含保护可以防止多个包含(例如#ifndef XXX #define XXX ....)#endif),你应该在每个头文件。
现在这使得循环包含为no-op…可能会导致编译失败(很难发现问题),因为其中一个定义不在您期望的位置。
如何管理循环类型引用取决于引用的性质。在许多情况下,您可以(并且应该)使用其中一种类型的前向声明。在其他情况下,您可以将引用移动到实现中,从而消除循环依赖。
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 编译包含字符串的代码时遇到问题
- 使用mongocxx驱动程序时包含头文件问题
- 在混合代码库中将C转换为C++时出现许多包含错误
- 在C++代码中包含opencv时,使用ctypes创建.so文件
- 当调用switch语句中的函数时(即使函数不包含循环),似乎是永不结束的循环的问题
- 在CMake中使用find_package时,是否会显式包含标头
- 当子类需要在 c++ 中相互包含时,继承有缺陷
- 使用 Qt 标头的递归包含时出错
- 为什么const x在多重包含时是可以的
- 如何在使用RCPP / Rinside包时将DLL库包含在MakeFile中
- 什么是.lib文件包含时生成DLL
- <QNetworkAccessManager><QNetworkReply> 在 BB10 应用程序开发的 cpp 文件中包含 时出错
- 两个类#相互包含时出错
- 删除不必要的包含时最佳做法是什么?
- 为什么 setjmp 在包含 时不在 std 命名空间中?<csetjmp>
- 如何从另一个文件中调用与另一个文件中同名的函数(当两者都包含时)
- 当两个头文件在c++中相互包含时,如何编写makefile
- 函数在作为 GLUT 项目的一部分包含时不读取文件
- 当不需要包含时