Предисловие
Нет волшебства, которое позволило бы вам скомпилировать ваш проект, когда в вашем графике зависимостей есть цикл. Вам потребуется выполнить некоторый рефакторинг, чтобы исключить цикл.
То, как вы работаете с циклическими зависимостями, разбивает модули на более мелкие и повторяет это до тех пор, пока вы не удалите цикл.
Алгоритм
1) Начните с извлечения частей A, которые используются C, в отдельный модуль (назовем его D):
A -> B -> C
| |
| |
--> D <--
Если D не зависит от какого-либо другого модуля, который выготовоЕсли это так, вам нужно продолжить расщепление.
2) Скажем, D stil зависит от B:
A -> B -> C
| ^ |
| | |
--> D <--
Вам необходимо аналогичным образом извлечь общие части из B (назовем это E):
A -> B -> C
| | |
| v |
| E |
| ^ |
| | |
--> D <--
Еще раз, если у E нет зависимостей, вызывающих цикл - все готово. Если нет - продолжайте.
3) Скажем, E зависит от C:
A -> B -> C --
| | ^ |
| v | |
| E --- |
| ^ |
| | |
--> D <------
Что мы будем делать? Разделение Обвиулси C (выдержка F):
A -> B -> C --
| | | |
| v v |
| E -> F |
| ^ |
| | |
--> D <------
Послесловие
Обратите внимание, что это может быть не так просто, если вообще возможно (в пределах разумного количества времени и / или бюджета).
Вы можете также подумать о дублировании кода в A, на который опирается C.