Я сделал это на базе кода C ++, которая уже была разбита на множество библиотек (что было хорошим началом).
Мне пришлось потренироваться (или догадаться), от какой библиотеки зависела больше всего, а от базы кода ничего не зависело. Затем я обработал каждую библиотеку по очереди.
Я по очереди посмотрел на каждый модуль (* .cpp файлы) и удостоверился, что его собственный заголовок был сначала #included и закомментировал остальные, затем я закомментировал все #include в этом заголовочном файле и затем перекомпилировал просто этот модуль, чтобы позволить компилятору сказать мне, что было нужно. Я бы откомментировал первый заголовок, который показался мне необходимым, и пересмотрел его, повторяя при необходимости. Было интересно посмотреть, сколько заголовков оказалось ненужным.
Если требуется только имя (поскольку у вас есть указатель или ссылка), используйте class name;
или struct name;
, что называется предварительным объявлением, и избегайте #include заголовочного файла.
Компилятор очень полезен, чтобы рассказать вам, каковы зависимости, когда вы закомментируете #includes (вам нужно перекомпилировать с ВСЕМИ компиляторами, которые вам нужны для поддержки переносимости).
Иногда мне приходилось перемещать модули между библиотеками, чтобы никакие пары или группы библиотек не были взаимозависимы.