|
发表于 2022-12-20 17:13:38
|
显示全部楼层

恭喜你找到一篇很无聊的文章,因为此时此刻写文章的人也在无聊的等着引擎5.1的编译。
之前看风神和大钊老师直播聊到过这个话题,很多人应该也聊到过,其实我也挺好奇的,所有就有了这篇文章
视频中风神用的比较早期的版本他统计的是一千多万行
每个人的统计方法不一样,所以结果也会不一样,从github上Clone下源代码你会发现里面的文件类型太多了,除了.h和.cpp 还有cs结尾的c#文件等等等等。
那这些文件要不要纳入统计呢?空行和注释算不算进去呢?每个人的统计需求不一样,很难有一个统计的结果,最好的办法是根据需求做一个脚本。
首先我们先看一下虚幻引擎到底有多少个文件吧
#!/usr/bin/python
#coding=utf-8
import os
import time
ProjectDir= '/Users/hotmac/Desktop/UnrealEngine-release/' #待统计的项目路径
#遍历文件, 递归遍历文件夹中的所有
def getFileNum(basedir):
filelists = []
for parent,dirnames,filenames in os.walk(basedir):
for filename in filenames:
filelists.append(os.path.join(parent,filename))
return filelists
if __name__ == '__main__' :
fileNum = len(getFileNum(ProjectDir))
print('文件个数:',str(fileNum))

我们遍历后发现光文件就有147109个
但是这14W个文件不仅仅是代码,还有图片等其他的资产,考虑到这里我们在看下引擎里有哪些文件类型吧
#!/usr/bin/python
#coding=utf-8
import os
import time
ProjectDir= '/Users/hotmac/Desktop/UnrealEngine-release' #待统计的项目路径
fileExt = []
#遍历文件, 递归遍历文件夹中的所有
def getFile(basedir):
for parent,dirnames,filenames in os.walk(basedir):
for filename in filenames:
ext = filename.split('.')[-1]
if ext not in fileExt:
fileExt.append(ext)
if __name__ == '__main__' :
getFile(ProjectDir)
print("文件类型数量:"+str(len(fileExt)))
print("文件类型列表:"+str(fileExt))
文件类型数量:205
文件类型列表:['bat', 'sh', 'md', 'DS_Store', 'uprojectdirs', 'editorconfig', 'gitignore', 'command', 'gitattributes', 'txt', 'uproject', 'json', 'ini', 'cs', 'h', 'cpp', 'udn', 'css', 'html', 'uplugin', 'csproj', 'xml', 'ispc', 'tps', 'inl', 'ush', 'usf', 'js', 'ts', 'py', 'LICENSE', 'rc', 'filters', 'vcxproj', 'sln', 'hpp', 'Makefile', 'def', 'c', 'pl', 'flite', 'lang', 'lex', 'vcproj', 'README', 'dsw', 'mk', 'dsp', 'cc', 'inc', 'mm', 'makefile', 'cmake', 'exp', 'tsx', 'VERSION', 'isph', 'java', 'AUTHORS', 'config', 'manifest', 'resx', 'settings', 'H', 'xaml', 'template', 'rc2', 'xcconfig', 'dockerfile', 'ps1', 'Dockerfile', 'm', 'gitmodules', 'aspx', 'hlsl', 'linux', 'windows', 'gmake', 'win', 'test', 'tbbproxy', 'tbbmalloc', 'tbb', 'rml', 'yml', 'ChangeLog', 'am', 'in', 'C', 'mingw32', 'unx', 'sgi', 'w32', 'dec', 'solaris', 'msys', 'hpgcc', 'beos', 'amiga', 'clang-asan', 'darwin', 'linux-opt', '64sunu', 'hpux', 'cegcc', 'openbsd', 'hp64', 'aix', 'vcwin32', 'ibmc', 'so9', 'bc32', 'freebsd', 'dj2', 'intel', 'mips', 'clang', 'netbsd', 'sggcc', 'sunos', 'acorn', '32sunu', 'std', 'atari', 'gcc', 'sco', 'gcc-asan', 'tc3', 'bor', 'msc', 'solaris-x86', 'ne12bsd', 'knr', 'x86', 'x64', 'watcom', 'elf', 'vsprops', 'glsl', 'mingw', 'TXT', 'os4', 'PIC', 'Epic', 'git-blame-ignore-revs', 'testing', 'sources', 'swift', 'common', 'sphinx', 'tests', 'unittest', 'FAQ', 'emx', 'tc', 'riscos', 'os2', 'sas', 'pup', 'version', 'CHANGELOG', 'XML', 'Version', 'hcustom', 'unix', 'pandora', 'minimal', 'wiz', 'psp', 'changelog', 'mac', 'cygwin', 'fip', 'gnu', 'iphone', 'osx', 'srcs', 'PL', 'vc', 'dll', 'createdump', 'dylib', 'GitDependencies', 'exe', 'so', 'xbuild', 'mono-sgen64', 'csc', 'mcs', 'mono', 'pbxproj', 'plist', 'png', 'entitlements', 'xib', 'strings', 'jpg', 'storyboard', 'gif', 'vms', 'com', 'DOS', 'ami', 'snippet', 'cmd'] 引擎内光是文件类型就是两百多个
既然这样那我们统计的时候只找常见的一些文件类型做统计吧,
#!/usr/bin/python
#coding=utf-8
import os
import time
ProjectDir= '/Users/hotmac/Desktop/UnrealEngine-release/' #待统计的项目路径
# 指定想要统计的文件类型
whitelist = ['h', 'cpp', 'html', 'css', 'js', 'python']
ignoreSpaces = True #忽略空行
#遍历文件, 递归遍历文件夹中的所有
def getFile(basedir):
filelists = [] # 要统计的文件列表
for parent,dirnames,filenames in os.walk(basedir):
for filename in filenames:
ext = filename.split('.')[-1]
if ext in whitelist:
filelists.append(os.path.join(parent,filename))
return filelists
#统计单个文件的行数
def countLine(fname):
count = 0
try:
for file_line in open(fname).readlines():
if ignoreSpaces:
if file_line != '' and file_line != '\n' : #过滤掉空行
count += 1
else:
count += 1
return count
except:
return 0;
if __name__ == '__main__' :
TotalNumber = 0
for filelist in getFile(ProjectDir):
TotalNumber = TotalNumber + countLine(filelist)
print('总行数:',TotalNumber)

通过代码我们可以看到在排除空行的情况下,总行数是两千两百多万行
这下我们就彻底知道引擎到底多少行代码了 |
|