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中使用dict和set方法的教程
Apr 27 Python
你眼中的Python大牛 应该都有这份书单
Oct 31 Python
python查询文件夹下excel的sheet名代码实例
Apr 02 Python
python3 中的字符串(单引号、双引号、三引号)以及字符串与数字的运算
Jul 18 Python
Django Rest framework频率原理与限制
Jul 26 Python
基于Python检测动态物体颜色过程解析
Dec 04 Python
python pymysql链接数据库查询结果转为Dataframe实例
Jun 05 Python
如何解决cmd运行python提示不是内部命令
Jul 01 Python
Python全局变量与global关键字常见错误解决方案
Oct 05 Python
用pip给python安装matplotlib库的详细教程
Feb 24 Python
pytorch 实现L2和L1正则化regularization的操作
Mar 03 Python
讲解Python实例练习逆序输出字符串
May 06 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
十大感人催泪爱情动漫 第一名至今不忍在看第二遍
2020/03/04 日漫
PHP个人网站架设连环讲(三)
2006/10/09 PHP
php is_file()和is_dir()用于遍历目录时用法注意事项
2010/03/02 PHP
php中使用session防止用户非法登录后台的方法
2015/01/27 PHP
PHP IDE phpstorm 常用快捷键
2015/05/18 PHP
3种php生成唯一id的方法
2015/11/23 PHP
PHP7多线程搭建教程
2017/04/21 PHP
PHP的mysqli_rollback()函数讲解
2019/01/23 PHP
js与jquery中获取当前鼠标的x、y坐标位置的代码
2011/05/23 Javascript
javascript检测是否联网的实现代码
2014/09/28 Javascript
jquery操作select元素和option的实例代码
2016/02/03 Javascript
浅谈JavaScript的自动垃圾收集机制
2016/12/15 Javascript
巧用weui.topTips验证数据的实例
2017/04/17 Javascript
BootStrap给table表格的每一行添加一个按钮事件
2017/09/07 Javascript
基于VUE移动音乐WEBAPP跨域请求失败的解决方法
2018/01/16 Javascript
关于ligerui子页面关闭后,父页面刷新,重新加载的方法
2019/09/27 Javascript
node.JS二进制操作模块buffer对象使用方法详解
2020/02/06 Javascript
在Python中使用异步Socket编程性能测试
2014/06/25 Python
Python中内置数据类型list,tuple,dict,set的区别和用法
2015/12/14 Python
Python3 加密(hashlib和hmac)模块的实现
2017/11/23 Python
Python中max函数用于二维列表的实例
2018/04/03 Python
python实现键盘控制鼠标移动
2020/11/27 Python
Python中出现IndentationError:unindent does not match any outer indentation level错误的解决方法
2020/04/18 Python
python3实现字符串操作的实例代码
2019/04/16 Python
使用css3和jquery实现可伸缩搜索框
2014/02/12 HTML / CSS
html5中嵌入视频自动播放的问题解决
2020/05/25 HTML / CSS
泰国王权免税店官方网站:KingPower
2019/03/11 全球购物
实习生自我鉴定范文
2013/12/05 职场文书
社区端午节活动方案
2014/01/28 职场文书
活动策划邀请函
2014/02/06 职场文书
手工社团活动方案
2014/02/17 职场文书
安全生产目标管理责任书
2014/07/25 职场文书
购房意向书
2014/08/30 职场文书
表扬稿范文
2015/01/17 职场文书
使用ORM新增数据在Mysql中的操作步骤
2021/07/26 MySQL
浅谈JavaScript浅拷贝和深拷贝
2021/11/07 Javascript