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代理抓取并验证使用多线程实现
May 03 Python
python中__call__方法示例分析
Oct 11 Python
Python的Django中django-userena组件的简单使用教程
May 30 Python
python内置函数:lambda、map、filter简单介绍
Nov 16 Python
python 对象和json互相转换方法
Mar 22 Python
解决pycharm 误删掉项目文件的处理方法
Oct 22 Python
对Python3 序列解包详解
Feb 16 Python
python判断所输入的任意一个正整数是否为素数的两种方法
Jun 27 Python
python基于property()函数定义属性
Jan 22 Python
如何基于Django实现上下文章跳转
Sep 16 Python
教你用Python写一个植物大战僵尸小游戏
Apr 25 Python
OpenCV-Python实现人脸磨皮算法
Jun 07 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/02/08 PHP
JavaScript中关于indexOf的使用方法与问题小结
2010/08/05 Javascript
Javascript下判断是否为闰年的Datetime包
2010/10/26 Javascript
JQuery设置文本框和密码框得到焦点时的样式
2013/08/30 Javascript
js生成动态表格并为每个单元格添加单击事件的方法
2014/04/14 Javascript
使用javascript获取页面名称
2014/12/23 Javascript
JavaScript判断数组是否包含指定元素的方法
2015/07/01 Javascript
vue.js表格组件开发的实例详解
2016/10/12 Javascript
javascript 闭包详解及简单实例应用
2016/12/31 Javascript
JS简单获取当前日期时间的方法(如:2017-03-29 11:41:10 星期四)
2017/03/29 Javascript
javascript实现非常简单的小数取整功能示例
2017/06/13 Javascript
jQuery实现手势解锁密码特效
2017/08/14 jQuery
vue父组件向子组件(props)传递数据的方法
2018/01/02 Javascript
vue elementui form表单验证的实现
2018/11/11 Javascript
微信小程序 冒泡事件原理解析
2019/09/27 Javascript
VUE:vuex 用户登录信息的数据写入与获取方式
2019/11/11 Javascript
js实现图片实时时钟
2020/01/15 Javascript
[53:03]Optic vs TNC 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
python线程、进程和协程详解
2016/07/19 Python
unittest+coverage单元测试代码覆盖操作实例详解
2018/04/04 Python
Python实现多条件筛选目标数据功能【测试可用】
2018/06/13 Python
python GUI库图形界面开发之PyQt5信号与槽基础使用方法与实例
2020/03/06 Python
python中if及if-else如何使用
2020/06/02 Python
python Matplotlib数据可视化(1):简单入门
2020/09/30 Python
Django扫码抽奖平台的配置过程详解
2021/01/14 Python
python和opencv构建运动检测器的实现
2021/03/03 Python
处理HTML5新标签的浏览器兼容版问题
2017/03/13 HTML / CSS
美国家喻户晓的保健品品牌:Vitamin World(维他命世界)
2016/08/19 全球购物
学校经典推荐信
2013/10/30 职场文书
房地产还款计划书
2014/01/10 职场文书
给幼儿园老师的表扬信
2014/01/19 职场文书
出纳员岗位职责
2014/03/13 职场文书
市场策划求职信
2014/08/07 职场文书
教务处教学工作总结
2015/08/10 职场文书
Python学习之包与模块详解
2022/03/19 Python
vue实现登陆页面开发实践
2022/05/30 Vue.js