2010-08-04 3 views
4

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

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

ответ

2

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

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

Я затем запустить SCons, используя что-то вроде этого

BUILD_STYLE=timing scons > timing_log.txt 

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

2

Если вы используете 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/"[email protected]" 

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

Затем запустите SCons только с одной параллельной резьбой через опцию -j1.

+0

+1, не совсем решает проблему так, как мне хотелось бы, но это дало мне некоторые идеи, которые я использовал в своем решении. –

3

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

Смежные вопросы