计算 SLOC GCC C/C++ Linux
Posted
技术标签:
【中文标题】计算 SLOC GCC C/C++ Linux【英文标题】:Calculate SLOC GCC C/C++ Linux 【发布时间】:2009-02-12 22:36:26 【问题描述】:我们在 Linux 下有一个相当大的(280 个二进制文件)软件项目,目前它的代码结构非常分散 - 这意味着无法[计算] 源代码树中的哪些代码是有效的(构建为可部署的二进制文件)以及已弃用的内容。但是Makefiles很好。我们需要计算整个项目的 C/C++ SLOC。
这里有一个问题 - 我可以找出 SLOC GCC 已编译吗?或者也许我可以从二进制文件中获得这些信息(可能是调试信息)?或者也许我可以找出二进制文件是从哪些源文件编译而来并使用这些信息来计算 SLOC?
谢谢 波格丹
【问题讨论】:
SLOC == “标准代码行”之类的? 可能是“源代码行”。不是一个非常有用的指标,但有时其他人需要。 是的,我的意思是源代码行——我们需要它来计算应用程序的哪些部分被测试覆盖。我们涵盖了 280 个组件中的几个组件,需要知道这与整个项目相比有多少 【参考方案1】:这取决于 GCC 编译的 SLOC 是什么意思。如果您的意思是跟踪 GCC 使用的项目中的源文件,那么您可能会使用列出源文件和头文件的依赖项跟踪选项。那是-M
和各种相关选项。谨防包括系统提供的标头。我有时使用的一种技术是用适当的变体替换标准 C 编译器 - 例如,为了确保 64 位编译,我使用 'CC="gcc -m64"
' 来保证使用 C 编译器时,它将在 64 位编译位模式。显然,有了文件列表,你可以使用wc
来计算行数。您使用“sort -u
”来消除重复的标题。
一个明显的问题是,如果您发现所有内容都包含在相对路径名中 - 那么您必须更仔细地确定每个文件的位置。
如果您对 SLOC 有其他定义,则需要说明您的想法。有时,人们正在寻找非空白、非注释的 SLOC,例如 - 但您仍然需要源文件列表,我认为 -M
选项将帮助您确定。
【讨论】:
嗨,我在小型“hello world”上采用了这种方法,它似乎有效。它会产生很多包含 iostream 的标头,但它们都可以被 /usr 前缀切断。虽然很难在项目中应用这种方法——我必须修补一大堆 makefile,这是个好建议。谢谢 @Bogdan - 可能需要的更改之一是允许对 makefile 进行集中更改,例如,通过使用“include $TOPDIR/config/configuration.mk”,一个定义项目范围的选项等。我的 makefile 通常为 CFLAGS 命令行上的用户选项保留 UFLAGS。【参考方案2】:您想要的第一件事是您实际编译的准确列表。您可以通过使用包装脚本而不是 gcc 来实现这一点。
您想要的第二个列表是用于此的文件列表。为此,请查阅依赖项列表(正如您所说的那样)。 (看来你需要 make --print-data-base)
然后,对文件列表进行排序和去重,并丢弃系统标头。对于每个剩余文件,使用您喜欢的工具确定 SLOC 计数。
【讨论】:
嗨,用假的 gcc 代替原始 gcc 以获得编译的文件的方法似乎效果最好。尽管我必须自己管理包含的 .h 文件,但实施时间最少是最有效的方法。我将使用它来获得精确的指标。谢谢【参考方案3】:你可以做的是只做一个预处理器编译,使用 gcc 的 -E 标志:这将导致输出是被编译的实际代码。做一个简单的行数 (wc -l) 或更高级的。
它可能包含来自宏等的额外代码,但特别是如果您将它与您的代码的先前实例进行比较,这是一个很好的比较。
【讨论】:
我在小型“hello world”.cpp 上尝试了这种方法。执行 gcc -E a.cpp | 后wc -l 我得到了 29494 行。它们中的大多数是 iostream 内部的,摆脱这些代码将是一种平静的工作。谢谢您的回答。如果您将它与比较(差异)软件一起使用,我相信它会很有用。【参考方案4】:您可以在这里找到一个名为 sloccount
的免费 (GPL) 工具,专门用于估算任何规模项目中的 SLOC:
http://www.dwheeler.com/sloccount/
【讨论】:
【参考方案5】:我使用以下方法在 2 小时内获取脏指标值。尽管精确度远非理想,但足以做出决定。
我们使用了大约 40 kb 的代码并使用 gcov 计算了该代码的 SLOC。然后我们计算了“每字节的源代码行数”指标,并使用它来获得整个项目的 C 源代码大小的近似 SLOC 数。
结果很好地满足了我们的需求。
谢谢
【讨论】:
【参考方案6】:您可能想尝试 Resource Standard Metrics,因为它会计算有效的代码行数,不包括程序员风格的独立大括号等,并人为地将 SLOC 计数增加 10% 到 33%。向他们索取免费的限时许可证以试一试。
他们的网页是http://msquaredtechnologies.com
【讨论】:
以上是关于计算 SLOC GCC C/C++ Linux的主要内容,如果未能解决你的问题,请参考以下文章