日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Python實(shí)現(xiàn)生成簡(jiǎn)單的Makefile文件代碼示例

系統(tǒng) 1938 0

在linux下寫幾個(gè)測(cè)試程序,還要一行行的輸入g++命令進(jìn)行編譯,當(dāng)經(jīng)常改測(cè)試代碼的時(shí)候,那一次次的敲(或者一次次的上線箭頭選)也感覺(jué)不爽,不如make來(lái)的快。用Makefile的好處就不用多說(shuō)了,這里我寫了個(gè)腳本,其功能是自動(dòng)搜索當(dāng)前目錄(不包括子目錄)下的“.c”文件生成Makefile文件。

代碼在這里,功能有限(適用于單個(gè)文件是一個(gè)獨(dú)立的測(cè)試代碼的情況),需要的朋友可以稍作修改以滿足需求。

復(fù)制代碼 代碼如下:

#! /usr/bin/python
'''
?File????? : genMakefile.py
?Author??? : Mike
?E-Mail??? : Mike_Zhang@live.com
'''
import os

def genMakefileStr(dir,surfix = '.c'):
??? msg = ''
??? msg = msg + 'CC = gcc' + '\n'
??? msg = msg +? 'CFLAGS = -g -O2 -Wall' + '\n\n'
???
??? fList = []
??? for dirPath,dirNames,fileNames in os.walk(dir):
??????? for file in fileNames:
??????????? name,extension = os.path.splitext(file)
??????????? if extension == surfix:
??????????????? fList.append(name)
??????? break # only search the current directory
??? str1 = 'all:\n'
??? str2 = ''
??? str3 = 'clean:\n'
??? for f in fList:
??????? str1 = str1 + '\tmake ' + f + '\n'
??????? str2 = ('%s%s:%s.o\n') % (str2,f,f)
??????? str2 = ('%s\t$(CC) -o %s %s.o\n\n') % (str2,f,f)
??????? str3 = ('%s\trm -f %s\n') % (str3,f)
??? str3 = str3 + '\trm -f *.o\n'
??? strClean = '.c.o:\n\t$(CC) $(CFLAGS) -c -o $*.o $<\n'
??? msg = ('%s%s\n%s\n%s\n%s') % (msg,str1,str2,str3,strClean)
??? #print 'msg : \n'
??? #print msg
??? return msg

if __name__ == '__main__':
??? str = genMakefileStr('.','.c')
??? file = open("Makefile","w")
??? file.write(str)
??? file.close()
??? print str

運(yùn)行效果如下(示例):

復(fù)制代碼 代碼如下:

# ./genMakefile.py?????????
CC = gcc
CFLAGS = -g -O2 -Wall

all:
??????? make pfun1
??????? make pfun2

pfun1:pfun1.o
??????? $(CC) -o pfun1 pfun1.o

pfun2:pfun2.o
??????? $(CC) -o pfun2 pfun2.o


clean:
??????? rm -f pfun1
??????? rm -f pfun2
??????? rm -f *.o

.c.o:
??????? $(CC) $(CFLAGS) -c -o $*.o $<

運(yùn)行腳本后進(jìn)行make即可。

附:

感覺(jué)上面的那個(gè)腳本用著不方便,隨后修改修改,代碼如下:

復(fù)制代碼 代碼如下:

#! /usr/bin/python
'''
? File????? : genMakefile.py
? Author??? : Mike
? E-Mail??? : Mike_Zhang@live.com
'''
import os,sys
?
surfix = ['.c','.cpp']

def genMakefileStr(dir):
??? msg = ''
??? msg = msg + 'CC = g++ ' + '\n'
??? msg = msg +? 'CFLAGS = -g -O2 -Wall' + '\n\n'
???
??? fList = []
??? for dirPath,dirNames,fileNames in os.walk(dir):
??????? for file in fileNames:
??????????? name,extension = os.path.splitext(file)
??????????? if surfix.count(extension) > 0:
??????????????? fList.append(name)
??????? break # only search the current directory
??? str1 = 'all:\n'
??? str2 = ''
??? str3 = 'clean:\n'
??? for f in fList:
??????? str1 = str1 + '\tmake ' + f + '\n'
??????? str2 = ('%s%s:%s.o\n') % (str2,f,f)
??????? str2 = ('%s\t$(CC) -o %s %s.o\n\n') % (str2,f,f)
??????? str3 = ('%s\trm -f %s\n') % (str3,f)
??? str3 = str3 + '\trm -f *.o\n'
??? strClean = '.c.cpp.o:\n\t$(CC) $(CFLAGS) -c -o $*.o $<\n'
??? msg = ('%s%s\n%s\n%s\n%s') % (msg,str1,str2,str3,strClean)
??? #print 'msg : \n'
??? #print msg
??? return msg
?
if __name__ == '__main__':
??? for arg in sys.argv[1:]:
??????? print arg
??? str = genMakefileStr(arg)
??? if arg[-1] == '/':arg = arg[:-1]
??? file = open(arg+"/Makefile","w")
??? file.write(str)
??? file.close()
??? print str

把文件genMakefile.py改名為genMakefile,復(fù)制到/usr/local/bin下,以后在需要的目錄里面執(zhí)行如下命令即可:

genMakefile .


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 张家港市| 海阳市| 延长县| 申扎县| 天水市| 镇江市| 甘德县| 元江| 仙居县| 秦皇岛市| 宜兰县| 沙坪坝区| 竹溪县| 门头沟区| 云梦县| 天祝| 梅河口市| 屯昌县| 余干县| 自贡市| 石楼县| 太仓市| 陇川县| 苏尼特左旗| 循化| 乌兰察布市| 蒙城县| 渝北区| 惠东县| 乐至县| 民勤县| 崇礼县| 南乐县| 宜城市| 安化县| 宝应县| 长治市| 泸西县| 荣成市| 交口县| 柞水县|