作者:朱金灿
来源:clever101的专栏
为什么大多数人学不会人工智能编程?>>>
我经常使用的编译linux程序的makefile不太正式,类似如下:
g++ a.cpp b.cpp \
-I"/opt/ThirdPartyLib/pugixml/include" \
-L"/opt/ThirdPartyLib/pugixml/lib" -lpugixml \
-std=c++11 -fPIE -o /opt/bin/MyApp
这是一个简单的编译应用程序的makefile。制作这个makefile的痛点在哪里呢?假如一个模块存在很多源码文件的话,需要把很多的源码文件都加进makefile文件,这样工作量是很大的。此时可以考虑使用python来遍历源码目录来自动构建一个makefile文件。代码比较简单,如下:
import os
def getAllFile(path, fileList):
dirList = []
for ff in os.listdir(path):
wholepath = os.path.join(path, ff)
if os.path.isdir(wholepath):
dirList.append(wholepath)
if os.path.isfile(wholepath):
fileList.append(wholepath)
for dir in dirList:
getAllFile(dir, fileList)
def getSufFilePath(fileList, suffixs):
for ff in fileList[:]:
bMatch = False
for suffix in suffixs[:]:
if ff.endswith(suffix):
bMatch = True
break
if not bMatch:
fileList.remove(ff)
def CreateBuildShell(folder):
fileList = []
suffixs = ['.cpp','.c']
getAllFile(folder, fileList)
getSufFilePath(fileList, suffixs)
shellFile = folder + "\\make.sh"
count =0
line = "g++ "
with open(shellFile, 'w') as file:
for codeFile in fileList:
fileName = os.path.basename(codeFile)
if(0==count):
line += fileName
else:
line +=" "+fileName
count = count+1
if(3==count):
line+=" \\"
file.write(line + '\n')
line = ""
count=0
if __name__ == "__main__":
folder = "D:\\MyProject\\MyApp"
CreateBuildShell(folder)
当然使用python生成的这个makefile文件叫make.sh,它只是一个半成品。效果如下:
g++ a.cpp b.cpp \
你还得添加包含的头文件路径、链接库路径以及库名称,输出是一个应用程序还是so库,还有其它一些gcc编译选项等。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)