печать времени компиляции каждого файла в Visual Studio C ++ - PullRequest
10 голосов
/ 10 июля 2009

Как я могу создать таблицу для получения времени компиляции каждого файла c ++ в проекте Visual Studio 2005.

Ответы [ 3 ]

8 голосов
/ 28 сентября 2016

Я использую Visual Studio 2010, но в других версиях Visual Studio может быть что-то похожее.В VS2010 вы можете добавить в командную строку опции / Bt +, которые выводят время, необходимое для компиляции каждого файла.Поэтому в свойствах проекта в «Свойствах конфигурации» -> «C / C ++» -> «Командная строка» -> «Дополнительные параметры» добавьте / Bt +

Установка параметра / Bt + приводит к выводу (которыйзаписано в лог-файл) строки, подобные следующим:

time(c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\c1.dll)=0.05110s < 25394686804 - 25394831194 > BB [C:\not-important\nlopt-2.4.2\direct\DIRect.c]

Более подробную информацию об этой опции в https://blogs.msdn.microsoft.com/vcblog/2010/04/01/vc-tip-get-detailed-build-throughput-diagnostics-using-msbuild-compiler-and-linker/, которую я нашел благодаря этому ответу https://stackoverflow.com/a/3513043/453436

Естьмножество способов извлечь временные линии в зависимости от того, какие инструменты у вас есть.Я сделал это под оболочкой bash с помощью комбинации find, grep и perl.Следующее даст вам время компиляции, отсортированное по длине.

find . -name '*.log' | xargs grep time | perl -ne '$_ =~ /=(.*?)s.*\[(.*)\]/; print "$1 $2\n";' |sort -rn
3 голосов
/ 10 июля 2009

«Инструменты» -> «Параметры» -> «Проекты и решения» -> «Настройки проекта VC ++»

Галочка "Время сборки".

0 голосов
/ 10 июля 2009

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

  1. CreateProcess в компиляторе командной строки, перенаправляющий стандартный вывод в канал
  2. Чтение из канала, поиск имен исходных файлов
  3. Каждый раз, когда видно имя исходного файла, обратите внимание на текущую метку времени
  4. Когда канал закрыт, распечатайте время, необходимое для каждой сборки файла

Хотя этот подход может быть разработан в C ++, для его реализации, вероятно, будет проще использовать такой инструмент, как Perl.

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