Как измерить время сборки каждого компонента сборки scons? - PullRequest
4 голосов
/ 04 августа 2010

У меня есть большой проект C ++, который построен с использованием scons. Его сборка идет медленно, и я хочу внести некоторые изменения, чтобы попытаться сделать это быстрее. Теперь я хотел бы сосредоточить свое время на ускорении наиболее медленных частей сборки.

Как я могу определить, какие файлы дольше всего компилируются?

Ответы [ 3 ]

3 голосов
/ 24 февраля 2013

Я знаю, что этот вопрос старый и уже принят, но на него недавно ссылались из другого вопроса.Я думаю, что гораздо более элегантным решением было бы использование параметра командной строки SCons --debug=time, как указано в этот ответ .

2 голосов
/ 31 августа 2010

Я решил эту проблему, добавив некоторые дополнительные элементы в начало переменной CXXCOM. Scons использует эту переменную для фактической компиляции:

if os.getenv('BUILD_STYLE')=='timing':
  cxxcom = env['CXXCOM']
  env.Replace( CXXCOM = 'time '+cxxcom )

Затем я запускаю scons, используя что-то вроде этого

BUILD_STYLE=timing scons > timing_log.txt

и, наконец, привести в порядок журнал, используя несколько макросов vim.

2 голосов
/ 05 августа 2010

Если вы используете LInux, вы можете обернуть gcc или g++, чтобы при вызовах компилятора использовалась утилита gtime.Каждый вызов компилятора будет выглядеть следующим образом:

/usr/bin/time /usr/bin/g++ [rest of command]

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

#!/bin/bash -f
PATH_TO_COMPILER_DIR=/usr/bin
/usr/bin/time $PATH_TO_COMPILER_DIR/"$@"

Затем укажите переменную $ PATH, чтобы иметь оболочку компилятора.

Затем запустите SCons только с 1 параллельным потоком через параметр -j1.

...