如何在 Linux(使用 GCC)上记录 -lightly- 编译命令?

如何在 Linux(使用 GCC)上记录 -lightly- 编译命令?

在某些情况下,在 Linux 上通过 GCC 记录编译命令是有意义的

(我想记录编译命令、它的成功或失败、运行它所花费的CPU和实时时间、源文件的大小......)。这调音投影仪海湾合作委员会里程碑是一个(高级)例子来激励这一点。一个更简单的动机是对过去的编译进行简单的统计(例如,找到那些吃掉了大于100k的源文件的编译,或者花费了超过5秒的时间,例如决定将一个大的C++源文件重构为几个较小的文件。)。

我没有发现任何简单的程序这样做(在 Linux 上)...如果你知道一个(开源),请告诉。

然而,这些可能有更简单的用途。我刚刚在我的github.com/bstarynk/misc-basile/存储库 C++ 程序登录-gcc.cc(GPLv3+ 许可)及其构建脚本编译记录-gcc.sh

典型用途可能是$HOME/bin/ 早期的在你的 $PATH并添加已编译的logged-gcc可执行文件和logged-g++符号链接(在同一$HOME/bin/ 目录中),然后有 shell 脚本,例如:

#!/bin/bash
# file  ~/bin/gcc which should be executable
export LOGGED_CFLAGS='-g -Wall'
export LOGGED_GCC=/usr/bin/gcc-10
exec $HOME/bin/logged-gcc "$@"

#!/bin/bash
# file  ~/bin/g+ which should be executable
export LOGGED_CXXFLAGS='-g -Wall'
export LOGGED_GXX=/usr/bin/g++-10
exec $HOME/bin/logged-g++ "$@"

当然,运行

$HOME/bin/logged-gcc --help 

寻求帮助,并且

$HOME/bin/logged-gcc --version 

获取版本信息。

(实际上,$PATH使用符号链接的巧妙技巧可以避免上述 shell 脚本)

然后使用(在 Debian 上)cat /var/log/messages查看日志记录。


当然,重点不仅仅是重定向gccorg++命令,还要测量 CPU 和它所花费的时间以及输入源文件的大小gcc。这就是我所说的“记录编译命令”的意思——稍后能够对它们进行一些统计。

我知道-time 选项-freport-time或者gcc。它不测量输入源文件的大小。我也知道海湾合作委员会插件机械(见这个草案报告和旧的海湾合作委员会融化项目)。

我想尽可能透明地记录并以某种方式进行基准测试编译命令(例如,只需使用$PATH上面的技巧,然后只需设置环境变量,例如LOGGER_SQLITE在 my 中~/.zshrc),次要的高架(因此分叉了更多进程,例如记录器(1)或者杜(1)不是一个选项,因为一些编译(例如一个小的 C 源代码,请参阅我的杂项-巴塞尔存储库的示例)可以持续不到十分之一秒,请参阅时间(7))。编写基准测试海湾合作委员会插件可能取决于版本海湾合作委员会,可能太重了,可能需要将Makefile-s 更改为调用每个命令上都有该插件gcc

具体的用例可能是参考系统几个月后的项目(2021 年初)。由于它正在生成越来越多的 C++ 代码,编译计时应该决定生成更少但更大的 C++ 文件,或者生成更多但更小的文件,特别是在使用多个标准 C++ 时容器或 GUI 工具包,例如FLTK在生成的 C++ 代码中。

相关内容