2010-08-14 10 views
7

Saludos,¿Cómo se puede incorporar el soporte de gprof a un programa creado con SCons?

Aquí está mi archivo SConstruct:

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

También aquí es la salida de la compilación:

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. 

Como se puede ver que pase la opción "-pg" a el entorno de construcción. Después de compilar, ejecuto el programa para generar "gmon.out" pero no se produce.

¿Alguien puede confirmar este problema? o tienes una solución?

Gracias.

Actualización:

Gracias a los consejos que aquí, el archivo SConstruct de trabajo actualizado es el siguiente. El enlazador requiere la bandera, por lo que para pasarla a través de scons, se debe usar la opción "LINKFLAGS".

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

salida de compilación:

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. 

Nota del "-pg" adicional en la fase de vinculación.

Respuesta

4

El enlazador también necesita la opción -pg en este caso. De GCC hombre mago:

-pg 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 you must also use it when linking.

Trate de añadir la opción de LDFLAGS variable de entorno también.

+1

Gracias. El vinculador solo requiere la opción "-pg" como sugirió. SCons ve esta variable como "LINKFLAGS". – kobrien

Cuestiones relacionadas