在make / C代码中解析循环引用的正确方法?

时间:2012-08-03 16:09:34

标签: c makefile

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

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

由于显而易见的原因,这会产生一个循环引用警告,尽管它继续编译正常。解决这个问题的正确方法是什么?我应该重构模块来创建第三个 - moduleC - 将两者联系起来吗?

模块A是日志模块,模块B是cronjob实现。日志记录使用cronjob来安排日志轮换,而cronjob使用日志记录来告诉每个人它的内容。

模块C会相当小;只需创建一个cronjob来调用日志记录旋转功能,但日志记录将不需要知道cronjob。当然,Cronjob仍然依赖于记录。

或者我应该忽略警告?

3 个答案:

答案 0 :(得分:0)

你可以像这样使用舒缓:

#ifndef MY_HEADER_FILE_H
#define MY_HEADER_FILE_H

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

#endif

希望得到这个帮助。

问候。

答案 1 :(得分:0)

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

moduleC -> moduleB -> moduleA

答案 2 :(得分:0)

将头文件指定为目标头文件的先决条件是错误的,除非目标是重新创建,具体取决于先决条件。通常,目标文件目标取决于头文件,例如e。克。

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