【问题标题】:How to measure the percentage of files that were compiled successfully?如何衡量成功编译的文件的百分比?
【发布时间】:2017-09-27 14:04:53
【问题描述】:

我正在将一个大型软件移植到一个新平台上,基本上此时我所做的只是修复我偶然发现的编译错误。我的管理层在问我“你已经走了多远?” - 我如何衡量我能够成功编译多少以及还有多少?

这只是 c 源代码,我从“make”得到的日志塞得满满当当,我什至不知道用什么 grep 才能找到它。

【问题讨论】:

  • 有多少源文件构建成功?总共有多少?虽然您可能不会从剩下的所有内容中得到错误,但这似乎是您可以提供的唯一指标。这是一个非常愚蠢的指标,你(用外交术语)应该把它提交给你的项目经理(通过邮件或其他可以稍后指出的媒介),然后让项目经理处理上级老板们。
  • 你可以编写测试并计算你得到的果岭数量。鉴于源文件大小的巨大差异,恕我直言,成功编译文件的数量并不是衡量进度的好方法
  • 快速的方法(可能还需要几个小时的工作)是将整个项目放入允许单个文件(翻译单元)编译的 IDE 中。遍历所有 C 文件并单独编译该文件,一次一个。然后简单地计算编译的数量和未编译的数量。一些 IDE 甚至可以选择编译整个项目,然后在未编译的文件旁边显示某种图标。

标签: c linux compilation


【解决方案1】:

我会天真地比较 .cpp 文件和 .o 文件的数量:

#!/bin/bash

number_of_sources=$(find . -name \*.cpp | wc -l)
number_of_objects=$(find . -name \*.o   | wc -l)
progress=$(echo "${number_of_objects} * 100 / ${number_of_sources}" | bc)
echo "${progress}% of translation units successfully compiled."

这将需要与您的上下文相关的适应(一些子路径不要像.git/,一些重命名,...)

【讨论】:

  • 工作起来就像一个魅力(但我将扩展名更改为 .c),谢谢! (对所有人来说 - 是的,我同意这不是一个非常有用的指标,但我得到了 68%,我在这上面花了几天时间,所以这很重要)
  • @niralittle 经理确实需要指标。一个稍微不准确的指标总比没有指标好。
  • 投反对票的人,请说出原因,以便我改进答案。
【解决方案2】:

假设您有一个将 c++ 文件编译为目标文件的通用目标,您可以对 makefile 进行一些调整,使其为您计算编译次数:

SHELL=/bin/bash
[...]
COMPILED_FILES=0

all:
    #whatever you do to compile object files together
    echo "Total number of compiled files: " $(COMPILED_FILES)

%.o:%.cpp
    #whatever you do to compile to object file
    $(eval COMPILED_FILES=$(shell echo $$(($(COMPILED_FILES)+1))))

eval这一行可以从this questions selected answer理解。

【讨论】:

    猜你喜欢
    • 2013-05-08
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多