有没有办法确定一个 Xcode 项目包含多少行代码?我保证不会将此类信息用于管理衡量或员工基准测试目的。;)
14 回答
我看到这个浮动并自己使用它:
find . "(" -name "*.m" -or -name "*.mm" -or -name "*.cpp" -or -name "*.swift" ")" -print0 | xargs -0 wc -l
如前所述,我一直在使用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
-------------------------------------------------------------------------------
打开 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 键自动完成
记得在空格前加上“\”反斜杠
我建议从主项目中向下一个文件夹,这样你就可以摆脱框架中的代码计数
在终端中,切换到项目目录并运行:
find . -type f -print0 | xargs -0 cat | wc -l
如果您只想要某些文件类型,请尝试类似
find . -type f -name \*.[ch]* -print0 | xargs -0 cat | wc -l
查看 Xcode Statistician,它完全符合您的要求。它还提供了其他有趣的统计数据,因此值得不时尝试一下。
请注意,它不会在真实文件夹中查找,尽管它会按组查找。奇怪的是你没有使用真正的文件夹,所以它会很好用。如果您使用文件夹,那么您只需在每个文件夹中进行计数并将它们添加在一起。
注意:截至 2012 年 6 月,这似乎不适用于最新版本的 Xcode。
- 打开终端
- 导航到您的项目
在您的项目中执行以下命令:
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 文件数)
如果您在终端中转到项目目录并输入:
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
这将为您提供项目细分,以及每个文件和整个项目的总行数。
在 Mac 中实现 CLOC 库的步骤如下:
- 打开终端。
- 通过在终端中复制并粘贴以下命令(包括双引号)来安装Homebrew 。
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
如果询问,请输入系统密码。
您将看到如下所示的终端屏幕。
系统会弹出这么多权限,允许所有权限
如果一切顺利,您将看到如下终端屏幕,
- 现在是时候使用以下命令安装CLOC 。
brew install cloc
- 导航到项目目录并运行以下任一命令。
cloc . --exclude-dir=Pods
(排除 pod 文件)
cloc .
(包括 pod 文件)
如果一切顺利,它将显示如下代码行数,
Nozzi 的版本对我不起作用,但是这个版本:
find . -type f -print0 | xargs -0 cat | wc -l
快速简便的方法:
使用正则表达式搜索(查找导航器,选择查找 > 正则表达式)。
.\n
与 Xcode 搜索范围一起使用很方便,您可以轻松地将其自定义为您想要计算的任何类型的行;)。
您可以通过 MacPorts安装SLOCCount 。或者,更粗略地说,您可以使用 wc -l。
我不熟悉 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
),这样您就可以得到最后一行作为总数。
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
我是这个简单工具的作者。希望它可以帮助某人。