我有两个C模块,每个模块都使用另一个模块的功能。在我的makefile中,我已经表达了这一点:
moduleA.h: common.h moduleB.h
moduleB.h: common.h moduleA.h
由于显而易见的原因,这会产生一个循环引用警告,尽管它继续编译正常。解决这个问题的正确方法是什么?我应该重构模块来创建第三个 - moduleC - 将两者联系起来吗?
模块A是日志模块,模块B是cronjob实现。日志记录使用cronjob来安排日志轮换,而cronjob使用日志记录来告诉每个人它的内容。
模块C会相当小;只需创建一个cronjob来调用日志记录旋转功能,但日志记录将不需要知道cronjob。当然,Cronjob仍然依赖于记录。
或者我应该忽略警告?
答案 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