Как встроить поддержку gprof в программу, созданную с помощью SCons? - PullRequest
7 голосов
/ 14 августа 2010

Привет,

Вот мой файл SConstruct:

env = Environment()
env.Append(CCFLAGS=['-g','-pg'])
env.Program(target='program1', source= ['program1.c'])

Также вот вывод компиляции:

scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
gcc -o program1.o -c -g -pg program1.c
gcc -o program1 program1.o
scons: done building targets.

Как вы видите, я передаюопция "-pg" для среды сборки.После сборки я запускаю программу для генерации "gmon.out", но она не создается.

Кто-нибудь может подтвердить эту проблему?или есть решение?

Спасибо.

Обновление:

Благодаря приведенному здесь совету обновленный рабочий файл SConstruct выглядит следующим образом.Для компоновщика требуется флаг, поэтому, чтобы пропустить его через scons, необходимо использовать опцию «LINKFLAGS».

env = Environment()
env.Append(CCFLAGS=['-g','-pg'], LINKFLAGS=['-pg'])
env.Program(target='program1', source= ['program1.c'])

Выход компиляции:

scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
gcc -o program1.o -c -g -pg program1.c
gcc -o program1 -pg program1.o
scons: done building targets.

Обратите внимание на дополнительный «-pg"в фазе связывания.

1 Ответ

4 голосов
/ 14 августа 2010

В этом случае для компоновщика также требуется опция -pg.От GCC man mage:

<b>-pg</b> Generate extra code to write profile information suitable for the analysis program gprof. You must use this option when compiling the source files you want data about, and <b>you must also use it when linking</b>.

Попробуйте добавить опцию в LDFLAGS переменную среды тоже.

...