在某些情况下,在 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
查看日志记录。
当然,重点不仅仅是重定向gcc
org++
命令,还要测量 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++ 代码中。