2014-05-09 25 views
5

Come impostare i flag gprof per il compilatore e il linker di GNU g ++ in un CMakeLists.txt?Come impostare i flag di g ++ usando cmake in modo tale che gprof possa svelare?

mio approccio attuale,

set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -pg") 
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -pg") 
set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} -pg") 

non permette gprof per demangle le funzioni C++. Qualche idea? (Sto usando C++ 11)

+0

Tutto ciò che serve ad una funzione di decodifica i è il nome della funzione in sé, non è possibile aggiungere ulteriore g bandiere ++ per aiutare AFAIK. –

risposta

5

Prova con:

SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pg") 
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pg") 
SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -pg") 

Che devono aggiungere le bandiere per la compilazione e collegamento e utilizzare dopo eseguire il programma:

gprof ./my_exe 

Se si ottiene un errore come:

gmon.out: No such file or directory 

Ciò significa che la compilazione non ha aggiunto informazioni di profilazione in modo appropriato.

si suppone La serie di eventi qui a lavorare come segue:

1º Compile code with -pg option 
2º Link code with -pg option 
3º Run program 
4º Program generates gmon.out file 
5º Run gprof