使用 GNU make 编译启用配置文件的包

Posted

技术标签:

【中文标题】使用 GNU make 编译启用配置文件的包【英文标题】:Compiling package with profiling enabled using GNU make 【发布时间】:2014-11-10 23:31:45 【问题描述】:

我正在尝试编译一个启用了代码分析的大包(Heasoft)。该软件包使用 makefile 进行设置。 我正在启用编译,支持通过 CFLAGS 使用(gcc)“-pg”标志进行分析:

$ CFLAGS="-pg" make

编译一直运行,直到出现以下不兼容标志之间的错误:

gcc: error: -pg and -fomit-frame-pointer are incompatible

我应该如何处理它? (鉴于我有兴趣仅对软件包提供的一些工具进行概要分析,因此我提出了以下更客观的问题,希望可以更容易地回答这些问题)

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

谢谢。

【问题讨论】:

【参考方案1】:

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

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

为此,请将-fno-omit-frame-pointer 添加到调试标志中。

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

【讨论】:

以上是关于使用 GNU make 编译启用配置文件的包的主要内容,如果未能解决你的问题,请参考以下文章

GNU开发工具——CMake快速入门

使用autoconf完成编译配置

GNU开发工具——CMake快速入门

大型项目使用Automake/Autoconf完成编译配置(标准的编译过程已经变成了简单的三部曲:configure/make/make install,)

如何使用 GNU make 编译多个简单项目

大型项目使用Automake/Autoconf完成编译配置