Вопрос из интервью. Интервьюер спрашивает меня, как улучшить время компиляции кода c в их огромном проекте, если они изменяют только часть проекта. Вопрос не в том, как использовать опцию gcc, а в том, как разрешить зависимость в большом проекте.
Я не знаю, возможно ли это, но я бы сказал, что проект разбит на библиотеки, чтобы вам нужно было скомпилировать только ту библиотеку, которая была изменена.
Я бы выбрал CMAKE. Он рентабельный, простой в обслуживании, автоматизирует распараллеливание, а зависимости устраняются за вас, поэтому требуется только повторное связывание. Если какой-то фрагмент кода меняется часто, его изоляция в статической библиотеке и выбор общедоступного интерфейса предупредит программистов о том, что изменение интерфейса, вероятно, потребует перекомпиляции большой части проекта. SCU сократит время компоновки, но требует знания того, что вы делаете.
Использование динамических библиотек может сократить время компоновки, так как весь проект не нужно будет повторно связывать из-за небольшого изменения в другой части проекта.
Эта статья посвящена Автоматическое создание зависимости с использованием GNU Make. Я предлагаю вам прочитать руководство по эксплуатации и эту статью для получения хорошей информации по этой теме.
Что вам разрешено делать с проектом? Переписать с нуля? Используете классные инструменты? Просто крошечные хаки? Интервьюер - идиот, который просто кивает на все, что вы говорите, если вы говорите это уверенно? Или он / она тоже хакер?
Мы не сможем ответить на этот вопрос без дополнительной информации, а главное, какую систему сборки они используют в настоящее время. Если они перестраивают все каждый раз, когда вносятся какие-либо изменения, то ответ, предлагающий использовать make, является хорошим, но я склонен автоматически предполагать, что любой проект, состоящий из более чем одного файла, уже использует Make / CMake или аналогичный, если только оригинальный программист был совершенно некомпетентным ...
Лучший способ ускорить компиляцию - использовать утилиту make
.
Объедините несколько файлов c в один большой файл c. Каждый раз, когда изменяется один файл c, перемещайте его в отдельный файл. Поэтому файлы, которые вы не часто меняете, компилируются один раз. Остальные компилируются при их изменении.