как я могу получить время компиляции, сборки, препроцессора и компоновки отдельно для g

#c #gcc #makefile #compilation #g

#c #gcc #makefile #Сборник #g

Вопрос:

Мы работаем над сокращением времени сборки для нашего кода, который содержит несколько библиотек и cpp-файлов. Я хочу проверить, на каком шаге компиляции, сборки, препроцессора и компоновки уходит больше времени. Есть ли какой-либо способ, которым я могу получить отдельное время для всего проекта?

Пожалуйста, предложите. Любая помощь / указатель / предложения будут оценены. Я создаю с использованием make в моей системе debian.

Комментарии:

1. Явно выполнять каждый шаг отдельно?

2. Кроме того, зачем вам нужно это знать? Есть ли какая-то основная проблема, которая заставляет полагать, что вам нужно это время?

3. я пытался делать это отдельно, но из-за взаимосвязей в библиотеках я не могу выполнить сборку полностью. Даже я пытался использовать опцию -ftime-report, но это не сильно помогает во времени компоновки и предварительной обработки. @Someprogrammerdude

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

5. Всегда сборка занимает так много времени? Или просто полную перестройку? Если даже изменение одного исходного файла приводит к полной перестройке или занимает чрезмерно много времени, то в первую очередь рассмотрите возможность разделения вашей сборки, постарайтесь разделить как можно больше на независимые блоки, которые могут быть собраны отдельно. Тогда для основного проекта это в основном вопрос объединения независимых частей вместе, что должно быть быстрым, если у вас нет сотен частей (библиотек, статических или совместно используемых), которые необходимо связать.

Ответ №1:

Вы пробовали gcc использовать

‘-time[=FILE]’ Сообщает время процессора, затраченное каждым подпроцессом в последовательности компиляции. Для исходных файлов C это собственно компилятор и ассемблер (плюс компоновщик, если компоновка выполнена).

Без спецификации выходного файла вывод выглядит следующим образом:

   # cc1 0.12 0.01
  # as 0.00 0.01 

?
(Это из руководства.)

Комментарии:

1. спасибо, это помогает для большинства шагов. по-прежнему не удается зарегистрировать этап предварительной обработки. Могу ли я извлечь эти данные из -ftime-report?

2. Вы точно знаете, что вам это нужно, т. е. cc1plus (собственно компилятор) занимает высокое место в профиле? В любом случае, -no-integrated-cpp вариант, похоже, решает это за вас. В -time отчете вы увидите, что компилятор вызывается дважды: сначала с помощью -E (это proprocessor), а затем с помощью -fpreprocessed .

3. Большое спасибо, это единственный вариант, который я искал.