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开发的单词频率统计工具wordsworth使用方法
Jun 25 Python
Python遍历目录中的所有文件的方法
Jul 08 Python
python实现人人自动回复、抢沙发功能
Jun 08 Python
浅谈Python采集网页时正则表达式匹配换行符的问题
Dec 20 Python
python实现Excel文件转换为TXT文件
Apr 28 Python
python中列表的切片与修改知识点总结
Jul 23 Python
python django model联合主键的例子
Aug 06 Python
tensorflow实现打印ckpt模型保存下的变量名称及变量值
Jan 04 Python
Django数据库操作之save与update的使用
Apr 01 Python
Python astype(np.float)函数使用方法解析
Jun 08 Python
python opencv旋转图片的使用方法
Jun 04 Python
Python实现智慧校园自动评教全新版
Jun 18 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框架排名
2013/07/04 PHP
详谈PHP文件目录基础操作
2014/11/11 PHP
thinkPHP多语言切换设置方法详解
2016/11/11 PHP
CSS心形加载的动画源码的实现
2021/03/09 HTML / CSS
关于Mozilla浏览器不支持innerText的解决办法
2011/01/01 Javascript
使用npm发布Node.JS程序包教程
2015/03/02 Javascript
直接拿来用的页面跳转进度条JS实现
2016/01/06 Javascript
JQuery日历插件My97DatePicker日期范围限制
2016/01/20 Javascript
手机浏览器 后退按钮强制刷新页面方法总结
2016/10/09 Javascript
原生js实现弹出层登录拖拽功能
2016/12/05 Javascript
JavaScript错误处理和堆栈追踪详解
2017/04/18 Javascript
详解vue嵌套路由-params传递参数
2017/05/23 Javascript
在Vue组件化中利用axios处理ajax请求的使用方法
2017/08/25 Javascript
Vue press 支持图片放大功能的实例代码
2018/11/09 Javascript
手把手带你封装一个vue component第三方库
2019/02/14 Javascript
JS实现页面鼠标点击出现图片特效
2020/08/19 Javascript
JS实现简易贪吃蛇游戏
2020/08/24 Javascript
ES2020让代码更优美的运算符 (?.) (??)
2021/01/04 Javascript
详解Typescript里的This的使用方法
2021/01/08 Javascript
Python基础之函数用法实例详解
2014/09/10 Python
python简单实现计算过期时间的方法
2015/06/09 Python
在python3环境下的Django中使用MySQL数据库的实例
2017/08/29 Python
利用Python将时间或时间间隔转为ISO 8601格式方法示例
2017/09/05 Python
基于Python数据可视化利器Matplotlib,绘图入门篇,Pyplot详解
2017/10/13 Python
python中将\\uxxxx转换为Unicode字符串的方法
2018/09/06 Python
浅析CSS3中鲜为人知的属性:-webkit-tap-highlight-color
2017/01/12 HTML / CSS
html5利用canvas实现颜色容差抠图功能
2019/12/23 HTML / CSS
党校个人自我鉴定范文
2014/03/28 职场文书
高中生班主任评语
2014/04/25 职场文书
法定代表人授权委托书范文
2014/09/22 职场文书
2015年效能监察工作总结
2015/04/23 职场文书
婚宴父亲致辞
2015/07/27 职场文书
学生会任命书范本
2015/09/21 职场文书
使用javascript解析二维码的三种方式
2021/11/11 Javascript
一文弄懂MySQL索引创建原则
2022/02/28 MySQL
Win11如何默认打开软件界面最大化?Win11默认打开软件界面最大化的方法
2022/07/15 数码科技