如何使用 cmake 设置 g++ 的标志,以便 gprof 可以解散?
Posted
技术标签:
【中文标题】如何使用 cmake 设置 g++ 的标志,以便 gprof 可以解散?【英文标题】:How to set flags of g++ using cmake such that gprof can demangle? 【发布时间】:2014-05-09 08:43:27 【问题描述】:如何在 CMakeLists.txt 中为 GNU g++ 的编译器和链接器设置 gprof 标志?
我目前的做法,
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")
不允许 gprof 对 C++ 函数进行分解。有任何想法吗? (我使用的是 C++11)
【问题讨论】:
破解函数所需的只是函数名本身,您不能添加额外的 g++ 标志来帮助 AFAIK。 【参考方案1】:尝试使用:
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")
编译链接必须加flags,执行程序后使用:
gprof ./my_exe
如果您收到如下错误:
gmon.out: No such file or directory
这意味着编译没有正确添加分析信息。
这里的一系列事件应该如下工作:
1º Compile code with -pg option
2º Link code with -pg option
3º Run program
4º Program generates gmon.out file
5º Run gprof
【讨论】:
以上是关于如何使用 cmake 设置 g++ 的标志,以便 gprof 可以解散?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 CMake 中为外部 INTERFACE_SOURCES 设置编译标志?