Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 计算SLOC GCC C C/C++;Linux_C++_C_Linux_Gcc - Fatal编程技术网

C++ 计算SLOC GCC C C/C++;Linux

C++ 计算SLOC GCC C C/C++;Linux,c++,c,linux,gcc,C++,C,Linux,Gcc,我们在Linux下有一个相当大的(280个二进制文件)软件项目,目前它有一个非常分散的代码结构——这意味着我们无法[计算]源代码树中哪些代码是有效的(构建为可部署的二进制文件),哪些代码是不推荐的。但是makefile很好。我们需要为整个项目计算C/C++SLOC 这里有一个问题-我能找出SLOC GCC已经编译好了吗?或者我可以从二进制文件中获得这些信息(可能是调试信息)?或者我可以找出二进制文件编译的源文件,并使用这些信息计算SLOC 谢谢 Bogdan这取决于GCC编译的SLOC是什么意思

我们在Linux下有一个相当大的(280个二进制文件)软件项目,目前它有一个非常分散的代码结构——这意味着我们无法[计算]源代码树中哪些代码是有效的(构建为可部署的二进制文件),哪些代码是不推荐的。但是makefile很好。我们需要为整个项目计算C/C++SLOC

这里有一个问题-我能找出SLOC GCC已经编译好了吗?或者我可以从二进制文件中获得这些信息(可能是调试信息)?或者我可以找出二进制文件编译的源文件,并使用这些信息计算SLOC

谢谢
Bogdan

这取决于GCC编译的SLOC是什么意思。如果您的意思是跟踪GCC使用的项目中的源文件,那么您可能会使用列出源文件和头的依赖项跟踪选项。这就是
-M
和各种相关选项。注意不要包含系统提供的标题。我有时使用的一种技术是用适当的变体替换标准C编译器-例如,为了确保64位编译,我使用“
CC=“gcc-m64”
”来保证在使用C编译器时,它将以64位模式编译。显然,对于文件列表,您可以使用
wc
计算行数。您可以使用“
sort-u
”来消除重复的标题

一个明显的问题是,如果您发现所有内容都包含在相对路径名中,那么您必须更仔细地确定每个文件的位置


如果您对SLOC有其他的定义,那么您需要详细说明您的想法。例如,有时人们会寻找非空白、非注释的SLOC,但您仍然需要源文件列表,我认为
-M
选项将帮助您确定。您可以做的是只进行预处理器编译,使用gcc的-E标志:这将产生实际编译代码的输出。做一个简单的行计数(wc-l)或者更高级的事情


它可能包括来自宏的额外代码等。但特别是如果您将其与以前的代码实例进行比较,这是一个很好的比较。

您首先需要的是您实际编译的内容的准确列表。您可以通过使用包装器脚本而不是gcc来实现这一点

您需要的第二个列表是用于此操作的文件列表。为此,请查阅依赖项列表(正如您所说的那样,这是正确的)。(似乎您需要制作--打印数据库)


然后,对文件列表进行排序和重复数据消除,并抛出系统标题。对于剩余的每个文件,使用首选工具确定SLOC计数。

我使用以下方法在2小时内获得脏度量值。尽管精确性远非理想,但足以做出决定

我们获取了大约40KB的代码,并使用gcov计算了该代码的SLOC。然后,我们计算“每个字节的源代码行数”度量,并使用它来获得整个项目中使用C源代码大小的近似SLOC数

它正好满足了我们的需要


谢谢

您可能需要尝试资源标准度量,因为它计算有效的代码行,不包括独立的大括号等,这些代码是程序员风格的,并且人为地将SLOC计数增加了10%到33%。请他们提供免费的许可证,让他们试一试

他们的网页是

在这里,您可以找到一个名为sloccount的免费(GPL)工具,专门用于估算任何规模项目的SLOC:


SLOC==“标准代码行”或类似的东西?可能是“源代码行”。这不是一个非常有用的指标,但有时是其他人需要的。是的,我指的是源代码行-我们需要它来计算应用程序的哪些部分被测试覆盖。我们有280个项目中的几个部分,需要知道这与整个项目相比有多大。我在小的“hello world”。cpp上尝试了这种方法。在执行gcc-ea.cpp | wc-l之后,我得到了29494行。它们中的大多数都是iostream内部代码,摆脱这段代码将是一件轻松的工作。谢谢你的回答。我相信如果你将它与比较(diff)软件一起使用,它会很有用。嗨,我在小的“helloworld”上使用了这种方法,它似乎是有效的。它生成了许多包含iostream的头文件,但它们都可以被/usr前缀截断。虽然在项目中很难应用这种方法——我必须修补所有的makefile,但这是一个很好的建议。Thanks@Bogdan-可能需要的更改之一是允许对makefiles进行集中更改,例如,通过使用“include${TOPDIR}/config/configuration.mk”,一个定义项目范围选项的makefile,等等。我的makefiles通常在CFLAGS.Hi的命令行上为用户选项保留UFLAGS,用伪gcc替换orinial gcc以获得编译的文件的方法似乎工作得最好。尽管我必须自己管理包含的.h文件,但实现它所需的时间最少是最有效的方法。我要用它来得到精确的度量。谢谢