Структура файла C ++ с одним заголовком - PullRequest
1 голос
/ 29 августа 2010

Я хочу ускорить время сборки моего проекта на c ++, и мне интересно, может ли моя текущая структура вызвать ненужные перекомпиляции.

У меня есть * .cc и соответствующие файлы * .h, но все мои* .cc файлы включают в себя один заголовочный файл, который является main.h.

В main.h я включаю все необходимое и внешние глобальные переменные и объявляю функции, которые я использую.По сути, я не использую пространства имен.

Это плохой дизайн, который может вызвать ненужные перекомпиляции и медленные сборки?

Ответы [ 2 ]

3 голосов
/ 29 августа 2010

Это зависит.Если main.h редко изменяется, вы можете использовать предварительно скомпилированные заголовки, что значительно сократит время компиляции.С другой стороны, если main.h регулярно используется, это, вероятно, не очень хороший дизайн.

Дополнительная проблема, связанная с помещением всего в один включаемый файл, заключается в том, что он на самом деле не продвигает структуру вашего приложения.В хорошо разработанных приложениях вы часто имеете многоуровневую структуру.Помещая все в один включаемый файл, вы запутываете структуру вашего приложения.Это может работать для небольшого приложения, но если ваше приложение растет, вы однажды получите полный спагетти, где все зависит от всего остального.

Попробуйте разделить включаемый файл на несколько частей.Обычно у вас будет один .cpp и один .h файл на класс.Постарайтесь использовать как можно больше предварительных объявлений в вашем включаемом файле и включать только (в .h и .cpp) то, что действительно необходимо.

0 голосов
/ 29 августа 2010

Этот дизайн определенно приведет к медленному времени сборки.Что делают файлы и IDE при запуске сборки, так это то, что они проверяют, какие исходные (cc) файлы были изменены с момента последней компиляции.Он также проверяет, были ли изменены какие-либо файлы, от которых зависит исходный файл .Исходный файл зависит от всех заголовочных файлов, которые он включает, и от всех заголовочных файлов, которые эти заголовочные файлы включают, и т. Д. Если он обнаруживает какие-либо изменения, он перекомпилирует этот исходный файл.

Поскольку ваша настройка означает, что каждый источникфайлы включают в себя каждый отдельный заголовочный файл, и каждый раз, когда вы изменяете даже один заголовочный файл, вам нужно перекомпилировать каждый исходный файл.

Вы определенно захотите попробовать разделить что-то еще и избавиться от своего основного.ч файл.Обычно люди стараются свести к минимуму количество заголовочных файлов, включенных в заголовочный файл, и, между прочим, предпочитают сохранять включения в исходных файлах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...