0

我有两个 C 模块,每个模块都使用另一个的某些功能。在我的 makefile 中,我这样表达了这一点:

moduleA.h: common.h moduleB.h
moduleB.h: common.h moduleA.h

由于明显的原因,这会生成一个循环引用警告,尽管它继续编译得很好。解决这个问题的正确方法是什么?我是否应该重构这些模块以创建第三个 - moduleC - 将两者联系在一起?

模块 A 是一个日志模块,模块 B 是一个 cronjob 实现。Logging 使用 cronjob 来安排日志轮换,而 cronjob 使用 logging 来告诉每个人它在做什么。

模块 C 会相当小;只需创建一个 cronjob 来调用日志记录轮换函数,但日志记录不需要了解 cronjob。当然,Cronjob 仍然依赖于日志记录。

还是我应该忽略警告?

4

3 回答 3

0

你可以像这样使用舒缓:

#ifndef MY_HEADER_FILE_H
#define MY_HEADER_FILE_H

/* Prototypes and others consts and .... */

#endif

希望这有帮助。

问候。

于 2012-08-03T16:32:33.337 回答
0

您应该创建一个moduleA只记录而不用担心cron作业的日志模块版本。然后创建一个新模块(可能moduleC),它只涉及使用cron作业来轮换日志。那么你的依赖是非循环的:

moduleC -> moduleB -> moduleA
于 2012-08-03T17:56:11.290 回答
0

将头文件声明为目标头文件的先决条件是错误的,除非要根据先决条件重新制作目标。通常,目标文件目标取决于头文件,例如

moduleA.o moduleB.o: common.h moduleA.h moduleB.h
于 2014-04-07T07:57:13.780 回答