172

有没有办法确定一个 Xcode 项目包含多少行代码?我保证不会将此类信息用于管理衡量或员工基准测试目的。;)

4

14 回答 14

255

我看到这个浮动并自己使用它:

find . "(" -name "*.m" -or -name "*.mm" -or -name "*.cpp" -or -name "*.swift" ")" -print0 | xargs -0 wc -l
于 2010-10-24T01:33:19.857 回答
139

查看CLOC

cloc 计算许多编程语言中源代码的空白行、注释行和物理行。

旧版本存档在 SourceForge 上。)

于 2010-01-05T01:47:16.030 回答
83

如前所述我一直在使用CLOC,它相当容易使用。它是一个 PERL 脚本,您可以从项目目录中添加和运行它。Nathan Kinsinger

PERL 已经是 Mac OS 的一部分,您可以通过这种方式调用脚本来找出您编写的行数:

perl cloc-1.56.pl ./YourDirectoryWhereYourSourcesAre

这是我从此类命令中获得的输出示例:

   176 text files.
   176 unique files.                                          
     4 files ignored.

http://cloc.sourceforge.net v 1.56  T=2.0 s (86.0 files/s, 10838.0 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Objective C                     80           3848           1876          11844
C/C++ Header                    92            980           1716           1412
-------------------------------------------------------------------------------
SUM:                           172           4828           3592          13256
-------------------------------------------------------------------------------
于 2012-10-22T22:29:51.420 回答
62

打开 Terminal.app,进入项目的根目录,然后运行以下命令:

仅适用于 Swift:

find . \( -iname \*.swift \) -exec wc -l '{}' \+

仅适用于 Obj-C:

find . \( -iname \*.m -o -iname \*.mm -o -iname \*.h \) -exec wc -l '{}' \+

对于 Obj-C + Swift:

find . \( -iname \*.m -o -iname \*.mm -o -iname \*.h -o -iname \*.swift \) -exec wc -l '{}' \+

对于 Obj-C + Swift + C + C++:

find . \( -iname \*.m -o -iname \*.mm -o -iname \*.c -o -iname \*.cc -o -iname \*.h -o -iname \*.hh -o -iname \*.hpp -o -iname \*.cpp -o -iname \*.swift \) -exec wc -l '{}' \+

终端快速提示:
ls:列出目录内容
cd:更改目录
按 Tab 键自动完成
记得在空格前加上“\”反斜杠
我建议从主项目中向下一个文件夹,这样你就可以摆脱框架中的代码计数

于 2015-02-25T19:56:21.743 回答
45

在终端中,切换到项目目录并运行:

find . -type f -print0 | xargs -0 cat | wc -l

如果您只想要某些文件类型,请尝试类似

find . -type f -name \*.[ch]* -print0 | xargs -0 cat | wc -l
于 2010-01-05T01:30:34.597 回答
34

查看 Xcode Statistician,它完全符合您的要求。它还提供了其他有趣的统计数据,因此值得不时尝试一下。

请注意,它不会在真实文件夹中查找,尽管它会按组查找。奇怪的是你没有使用真正的文件夹,所以它会很好用。如果您使用文件夹,那么您只需在每个文件夹中进行计数并将它们添加在一起。

注意:截至 2012 年 6 月,这似乎不适用于最新版本的 Xcode。

于 2010-12-15T14:06:23.747 回答
33
  1. 打开终端
  2. 导航到您的项目
  3. 在您的项目中执行以下命令:

    find . -path ./Pods -prune -o -name "*.swift" -print0 ! -name "/Pods" | xargs -0 wc -l
    

    或者:

    find . -path ./Pods -prune -o -name "*[hm]" -print0 ! -name "/Pods" | xargs -0 wc -l
    

(*从总数中排除 pod 文件数)

于 2016-11-16T13:08:56.540 回答
16

如果您在终端中转到项目目录并输入:

find . "(" -name "*.h" -or -name "*.m" -or -name "*.mm" -or -name "*.hpp" -or -name "*.cpp"  -or  -name "*.c" -or -name "*.cc" -or -name "*.swift" ")" -print0 | xargs -0 wc -l

这将为您提供项目细分,以及每个文件和整个项目的总行数。

于 2013-09-25T05:47:53.530 回答
10

在 Mac 中实现 CLOC 库的步骤如下:

  1. 打开终端。
  2. 通过在终端中复制并粘贴以下命令(包括双引号)来安装Homebrew 。

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

如果询问,请输入系统密码。

您将看到如下所示的终端屏幕。

安装自制软件

系统会弹出这么多权限,允许所有权限

如果一切顺利,您将看到如下终端屏幕,

Homebrew 安装成功

  1. 现在是时候使用以下命令安装CLOC 。

brew install cloc

  1. 导航到项目目录并运行以下任一命令。

cloc . --exclude-dir=Pods(排除 pod 文件)

cloc .(包括 pod 文件)

如果一切顺利,它将显示如下代码行数,

CLOC 结果

于 2020-08-26T12:08:19.037 回答
9

Nozzi 的版本对我不起作用,但是这个版本:

find . -type f -print0 | xargs -0 cat | wc -l
于 2012-07-04T14:00:36.673 回答
7

快速简便的方法:

使用正则表达式搜索(查找导航器,选择查找 > 正则表达式)。

.\n

与 Xcode 搜索范围一起使用很方便,您可以轻松地将其自定义为您想要计算的任何类型的行;)。

于 2013-11-20T06:35:38.397 回答
6

您可以通过 MacPorts安装SLOCCount 。或者,更粗略地说,您可以使用 wc -l。

于 2010-01-05T01:27:37.723 回答
5

我不熟悉 xcode,但如果您只需要计算目录树中所有这些特定文件的行数,您可以使用以下命令:

find .... match of all those files ... -exec wc -l {} +

按照Joshua Nozzi 的回答,在GNU 中找到此类文件的正则表达式如下:

find . "(" -name "*.m" -or -name "*.mm" -or -name "*.cpp" -or -name "*.swift" ")" -exec wc -l {} +

甚至

find -regex ".*\.\(m\|mm\|cpp\|swift\)$" -exec wc -l {} +

这使用正则表达式来匹配所有以.m,或结尾.mm的文件。您可以在如何在文件查找中使用正则表达式中查看有关这些表达式的更多信息。.cpp.swift

如果您正在使用Mac OS find,那么您需要一种稍微不同的方法,正如Motti Shneor在评论中解释的那样:

find -E . -regex ".*\.([hmc]|mm|cp+|swift|pch)$" -exec wc -l {} +

两者都将提供以下形式的输出:

234 ./file1
456 ./file2
690 total

因此,您可以像这样保持它,也可以只通过管道传输到tail -1(即find ... | tail -1),这样您就可以得到最后一行作为总数。

于 2015-11-07T18:26:06.780 回答
2

line-counter是一个不错的选择。它比 CLOC 更轻巧,并且比其他命令更强大且更易于使用。

快速概览

这就是你获得工具的方式

$ pip install line-counter

使用line命令获取当前目录下的文件数和行数(递归)

$ line
Search in /Users/Morgan/Documents/Example/
file count: 4
line count: 839

如果您想要更多详细信息,只需使用line -d.

$ line -d
Search in /Users/Morgan/Documents/Example/
Dir A/file C.c                                             72
Dir A/file D.py                                           268
file A.py                                                 467
file B.c                                                   32
file count: 4
line count: 839

这个工具最好的部分是,你可以添加 .gitignore 之类的配置文件。您可以设置规则来选择或忽略要计数的文件类型,就像您在“.gitignore”中所做的一样。是的,这个工具只是为了让我更容易知道有多少行而发明的。

更多描述和用法在这里:https ://github.com/MorganZhang100/line-counter

我是这个简单工具的作者。希望它可以帮助某人。

于 2016-08-10T23:59:01.040 回答