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 ZipFile模块详解
Nov 01 Python
python中的全局变量用法分析
Jun 09 Python
在Django中创建第一个静态视图
Jul 15 Python
详解Python中的动态属性和特性
Apr 07 Python
Python基于递归和非递归算法求两个数最大公约数、最小公倍数示例
May 21 Python
Python实现的连接mssql数据库操作示例
Aug 17 Python
在python中使用requests 模拟浏览器发送请求数据的方法
Dec 26 Python
python3对接mysql数据库实例详解
Apr 30 Python
详解Python 定时框架 Apscheduler原理及安装过程
Jun 14 Python
pandas 选取行和列数据的方法详解
Aug 08 Python
python3.8下载及安装步骤详解
Jan 15 Python
手把手教你怎么用Python实现zip文件密码的破解
May 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从memcache读取数据再批量写入mysql的方法
2014/12/29 PHP
yii添删改查实例
2015/11/16 PHP
php实现遍历多维数组的方法
2015/11/25 PHP
深入理解PHP 数组之count 函数
2016/06/13 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
2018/02/06 PHP
laravel项目利用twemproxy部署redis集群的完整步骤
2018/05/11 PHP
从ThinkPHP3.2.3过渡到ThinkPHP5.0学习笔记图文详解
2019/04/03 PHP
让iframe自适应高度(支持XHTML,支持FF)
2007/07/24 Javascript
javascript 显示当前系统时间代码
2009/12/28 Javascript
javascript 随机展示头像实现代码
2011/12/06 Javascript
JavaScript操作XML 使用百度RSS作为新闻源示例
2012/02/17 Javascript
基于JQuery的多标签实现代码
2012/09/19 Javascript
jquery使用append(content)方法注意事项分享
2014/01/06 Javascript
js实现简单的购物车有图有代码
2014/05/26 Javascript
jQuery中index()的用法分析
2014/09/05 Javascript
jquery实现的动态回到顶部特效代码
2015/10/28 Javascript
js转html实体的方法
2016/09/27 Javascript
Vue.js学习之过滤器详解
2017/01/22 Javascript
深入理解ES6的迭代器与生成器
2017/08/19 Javascript
vue+swiper实现组件化开发的实例代码
2017/10/26 Javascript
layUI实现列表查询功能
2019/07/27 Javascript
vue element-ui table组件动态生成表头和数据并修改单元格格式 父子组件通信
2019/08/15 Javascript
js prototype和__proto__的关系是什么
2019/08/23 Javascript
基于JS实现视频上传显示进度条
2020/05/12 Javascript
给Python入门者的一些编程建议
2015/06/15 Python
浅谈tensorflow中张量的提取值和赋值
2020/01/19 Python
Django模板标签中url使用详解(url跳转到指定页面)
2020/03/19 Python
python的dict判断key是否存在的方法
2020/12/09 Python
CSS3中文字镂空、透明值、阴影效果设置示例小结
2016/03/07 HTML / CSS
香港士多网上超级市场:Ztore
2021/01/09 全球购物
如何打造一封优秀的留学推荐信
2014/01/25 职场文书
高三毕业评语
2014/12/31 职场文书
万能检讨书开头与结尾怎么写
2015/02/17 职场文书
2016母亲节感恩话语
2015/12/09 职场文书
golang 实现菜单树的生成方式
2021/04/28 Golang
《LOL》“克隆大作战”久违归来 幻灵战队皮肤上线
2022/04/03 其他游戏