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判断变量是否为Json格式的字符串示例
May 03 Python
python 实现将字典dict、列表list中的中文正常显示方法
Jul 06 Python
Python使用Flask-SQLAlchemy连接数据库操作示例
Aug 31 Python
python 使用 requests 模块发送http请求 的方法
Dec 09 Python
对Python捕获控制台输出流的方法详解
Jan 07 Python
Django model 中设置联合约束和联合索引的方法
Aug 06 Python
python实现递归查找某个路径下所有文件中的中文字符
Aug 31 Python
Pytorch 实现冻结指定卷积层的参数
Jan 06 Python
python生成并处理uuid的实现方式
Mar 03 Python
keras中的backend.clip用法
May 22 Python
python主要用于哪些方向
Jul 05 Python
python3操作redis实现List列表实例
Aug 04 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
解决ajax+php中文乱码的方法详解
2013/06/09 PHP
php中生成随机密码的自定义函数代码
2013/10/21 PHP
Yii Framework框架获取分类下面的所有子类方法
2014/06/20 PHP
PHP的Yii框架入门使用教程
2016/02/15 PHP
CI框架支持$_GET的两种实现方法
2016/05/18 PHP
php 截取GBK文档某个位置开始的n个字符方法
2017/03/08 PHP
PHP实现发送微博消息功能完整示例
2019/12/04 PHP
详解phpstorm2020最新破解方法
2020/09/17 PHP
jQuery 改变CSS样式基础代码
2010/02/11 Javascript
简单的Jquery全选功能
2013/11/07 Javascript
jquery常用函数与方法汇总
2015/09/01 Javascript
jQuery简单获取键盘事件的方法
2016/01/22 Javascript
jQuery Easyui datagrid editor为combobox时指定数据源实例
2016/12/19 Javascript
socket.io学习教程之基础介绍(一)
2017/04/29 Javascript
Javascript中toFixed计算错误(依赖银行家舍入法的缺陷)解决方法
2017/08/22 Javascript
jQuery实现可兼容IE6的遮罩功能详解
2017/09/19 jQuery
Vue组件开发之LeanCloud带图形校验码的短信发送功能
2017/11/07 Javascript
如何正确解决VuePress本地访问出现资源报错404的问题
2020/12/03 Vue.js
python端口扫描系统实现方法
2014/11/19 Python
离线安装Pyecharts的步骤以及依赖包流程
2020/04/23 Python
Python基于贪心算法解决背包问题示例
2017/11/27 Python
python根据unicode判断语言类型实例代码
2018/01/17 Python
Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例
2018/03/15 Python
python实现图片识别汽车功能
2018/11/30 Python
Python 简单计算要求形状面积的实例
2020/01/18 Python
网易微博Web App用HTML5开发的过程介绍
2012/06/13 HTML / CSS
1688平价精选商城:阿里集团旗下,工厂出厂价格直销
2017/04/24 全球购物
大学生怎样进行自我评价
2013/12/07 职场文书
大三学习计划书范文
2014/05/02 职场文书
学校法制宣传月活动总结
2014/07/03 职场文书
民主生活会对照检查材料思想汇报
2014/09/27 职场文书
小学新教师个人总结
2015/02/05 职场文书
父亲去世追悼词
2015/06/23 职场文书
制作能在nginx和IIS中使用的ssl证书
2021/06/21 Servers
用Python编写简单的gRPC服务的详细过程
2021/07/04 Python
Nginx配置之实现多台服务器负载均衡
2021/08/02 Servers