C 使用GNU make编译启用了评测的包

C 使用GNU make编译启用了评测的包,c,gcc,makefile,profiling,C,Gcc,Makefile,Profiling,我正在尝试编译一个启用了代码分析的大型包(Heasoft)。软件包使用makefiles进行安装。 我通过CFLAGS启用编译,并支持使用(gcc)“-pg”标志进行评测: $ CFLAGS="-pg" make 编译将一直运行,直到出现以下不兼容标志之间的错误: gcc:错误:-pg和-fomit帧指针不兼容 我该怎么处理呢?(考虑到我只对该软件包提供的一些工具感兴趣,我提出了下面更客观的问题,希望这些问题能更容易回答) 这个“省略帧指针”是什么?它真的需要吗 我可以告诉gnumake,忽

我正在尝试编译一个启用了代码分析的大型包(Heasoft)。软件包使用makefiles进行安装。 我通过CFLAGS启用编译,并支持使用(gcc)“-pg”标志进行评测:

$ CFLAGS="-pg" make
编译将一直运行,直到出现以下不兼容标志之间的错误:

gcc:错误:-pg和-fomit帧指针不兼容

我该怎么处理呢?(考虑到我只对该软件包提供的一些工具感兴趣,我提出了下面更客观的问题,希望这些问题能更容易回答)

  • 这个“省略帧指针”是什么?它真的需要吗
  • 我可以告诉gnumake,忽略命令行(在本例中为“-pg”)标志来避免此类冲突吗
  • 我可以告诉GNU make我想启用profiling(“-pg”)标志的代码(工具)吗
谢谢。

“忽略帧指针”正是这样做的-如果编译器检测到函数不需要它(例如,因为它没有参数,因此不会影响堆栈),它指示编译器不要将数据保存到CPU寄存器中。这样可以在每次通话中节省一点时间。此外,它还释放了一个寄存器,可用于进一步优化

另一方面,跟踪函数变得不可能,因此要启用调试或分析,您需要显式地恢复它

为此,向调试标志添加
-fno-ommit frame pointer

您可能还必须使用
-O0
标志禁用所有代码优化