Как уменьшить время компиляции c в большом проекте при изменении небольшого кода ядра

Вопрос из интервью. Интервьюер спрашивает меня, как улучшить время компиляции кода c в их огромном проекте, если они изменяют только часть проекта. Вопрос не в том, как использовать опцию gcc, а в том, как разрешить зависимость в большом проекте.

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

sturcotte06 01.05.2018 17:37

Я не знаю, возможно ли это, но я бы сказал, что проект разбит на библиотеки, чтобы вам нужно было скомпилировать только ту библиотеку, которая была изменена.

theGleep 01.05.2018 17:38

Я бы выбрал CMAKE. Он рентабельный, простой в обслуживании, автоматизирует распараллеливание, а зависимости устраняются за вас, поэтому требуется только повторное связывание. Если какой-то фрагмент кода меняется часто, его изоляция в статической библиотеке и выбор общедоступного интерфейса предупредит программистов о том, что изменение интерфейса, вероятно, потребует перекомпиляции большой части проекта. SCU сократит время компоновки, но требует знания того, что вы делаете.

xvan 01.05.2018 17:55

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

Christian Gibbons 01.05.2018 18:01

Эта статья посвящена Автоматическое создание зависимости с использованием GNU Make. Я предлагаю вам прочитать руководство по эксплуатации и эту статью для получения хорошей информации по этой теме.

Tormund Giantsbane 01.05.2018 19:08

Что вам разрешено делать с проектом? Переписать с нуля? Используете классные инструменты? Просто крошечные хаки? Интервьюер - идиот, который просто кивает на все, что вы говорите, если вы говорите это уверенно? Или он / она тоже хакер?

Andreas 01.05.2018 19:19

Мы не сможем ответить на этот вопрос без дополнительной информации, а главное, какую систему сборки они используют в настоящее время. Если они перестраивают все каждый раз, когда вносятся какие-либо изменения, то ответ, предлагающий использовать make, является хорошим, но я склонен автоматически предполагать, что любой проект, состоящий из более чем одного файла, уже использует Make / CMake или аналогичный, если только оригинальный программист был совершенно некомпетентным ...

Sean Burton 02.05.2018 11:11
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
7
75
1

Ответы 1

Лучший способ ускорить компиляцию - использовать утилиту make.

Другие вопросы по теме