Python实现生成简单的Makefile文件代码示例


Posted in Python onMarch 10, 2015

在linux下写几个测试程序,还要一行行的输入g++命令进行编译,当经常改测试代码的时候,那一次次的敲(或者一次次的上线箭头选)也感觉不爽,不如make来的快。用Makefile的好处就不用多说了,这里我写了个脚本,其功能是自动搜索当前目录(不包括子目录)下的“.c”文件生成Makefile文件。

代码在这里,功能有限(适用于单个文件是一个独立的测试代码的情况),需要的朋友可以稍作修改以满足需求。

#! /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

运行效果如下(示例):

# ./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 $<

运行脚本后进行make即可。

附:

感觉上面的那个脚本用着不方便,随后修改修改,代码如下:

#! /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,复制到/usr/local/bin下,以后在需要的目录里面执行如下命令即可:

genMakefile .

Python 相关文章推荐
Python中字符串的常见操作技巧总结
Jul 28 Python
python中abs&amp;map&amp;reduce简介
Feb 20 Python
Python中如何使用if语句处理列表实例代码
Feb 24 Python
使用Python做定时任务及时了解互联网动态
May 15 Python
java判断三位数的实例讲解
Jun 10 Python
介绍一款python类型检查工具pyright(推荐)
Jul 03 Python
python实现的分析并统计nginx日志数据功能示例
Dec 21 Python
Python pandas库中的isnull()详解
Dec 26 Python
python读取csv文件指定行的2种方法详解
Feb 13 Python
python print 格式化输出,动态指定长度的实现
Apr 12 Python
Python reversed反转序列并生成可迭代对象
Oct 22 Python
k-means & DBSCAN 总结
Apr 27 Python
Python和GO语言实现的消息摘要算法示例
Mar 10 #Python
Windows和Linux下使用Python访问SqlServer的方法介绍
Mar 10 #Python
Python脚本实现代码行数统计代码分享
Mar 10 #Python
Windows系统配置python脚本开机启动的3种方法分享
Mar 10 #Python
Python自动化构建工具scons使用入门笔记
Mar 10 #Python
Python操作CouchDB数据库简单示例
Mar 10 #Python
Python性能优化技巧
Mar 09 #Python
You might like
PHP 动态随机生成验证码类代码
2010/04/09 PHP
使用php实现下载生成某链接快捷方式的解决方法
2013/05/07 PHP
PHP根据传入参数合并多个JS和CSS文件的简单实现
2014/06/13 PHP
PHP使用数组实现矩阵数学运算的方法示例
2017/05/29 PHP
IE6背景图片不缓存问题解决方案及图片使用策略多个方法小结
2012/05/14 Javascript
分析Node.js connect ECONNREFUSED错误
2013/04/09 Javascript
jQuery ui插件的使用方法代码实例
2013/05/08 Javascript
JavaScript实现刷新不重记的倒计时
2016/08/10 Javascript
浅谈angularJS的$watch失效问题的解决方案
2017/08/11 Javascript
vue.js整合vux中的上拉加载下拉刷新实例教程
2018/01/09 Javascript
Vue中render函数的使用方法
2018/01/31 Javascript
jQuery实现标签子元素的添加和赋值方法
2018/02/24 jQuery
详解iview的checkbox多选框全选时校验问题
2019/06/10 Javascript
element el-tree组件的动态加载、新增、更新节点的实现
2020/02/27 Javascript
JavaScript async/await原理及实例解析
2020/12/02 Javascript
[04:47]DOTA2-潍坊风行电子俱乐部探秘
2014/08/08 DOTA
[02:37]TI8勇士令状不朽珍藏II视频展示
2018/06/23 DOTA
Python字符串处理函数简明总结
2015/04/13 Python
python2.7到3.x迁移指南
2018/02/01 Python
python 3.7.0 安装配置方法图文教程
2018/08/27 Python
python使用正则筛选信用卡
2019/01/27 Python
使用Python实现跳帧截取视频帧
2019/05/31 Python
python开启debug模式的方法
2019/06/27 Python
Python (Win)readline和tab补全的安装方法
2019/08/27 Python
使用matplotlib绘制图例标签中带有公式的图
2019/12/13 Python
解决Python spyder显示不全df列和行的问题
2020/04/20 Python
vue.js刷新当前页面的实例讲解
2020/12/29 Python
Html5 postMessage实现跨域消息传递
2016/03/11 HTML / CSS
高中班主任评语大全
2014/04/25 职场文书
关于安全的标语
2014/06/10 职场文书
民事诉讼代理委托书
2014/10/08 职场文书
加入学生会自荐书
2015/03/05 职场文书
Goland使用Go Modules创建/管理项目的操作
2021/05/06 Golang
Android Flutter实现图片滑动切换效果
2022/04/07 Java/Android
i7 6700处理器相当于i5几代
2022/04/19 数码科技
JavaScript架构localStorage特殊场景下二次封装操作
2022/06/21 Javascript