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实现在pickling的时候压缩的方法
Sep 25 Python
Python的Flask框架中使用Flask-Migrate扩展迁移数据库的教程
Jun 14 Python
python操作 hbase 数据的方法
Dec 18 Python
Python基础练习之用户登录实现代码分享
Nov 08 Python
Python内存管理方式和垃圾回收算法解析
Nov 11 Python
PyQt5主窗口动态加载Widget实例代码
Feb 07 Python
python生成ppt的方法
Jun 07 Python
对Python 3.5拼接列表的新语法详解
Nov 08 Python
用Python调用win命令行提高工作效率的实例
Aug 14 Python
利用Python计算KS的实例详解
Mar 03 Python
Python求区间正整数内所有素数之和的方法实例
Oct 13 Python
pytorch 中autograd.grad()函数的用法说明
May 12 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
smarty模板局部缓存方法使用示例
2014/06/17 PHP
教你识别简单的免查杀PHP后门
2015/09/13 PHP
php for 循环使用的简单实例
2016/06/02 PHP
php简单实现文件或图片强制下载的方法
2016/12/06 PHP
深入讲解PHP的对象注入(Object Injection)
2017/03/01 PHP
Js组件的一些写法
2010/09/10 Javascript
Javascript倒计时页面跳转实例小结
2013/09/11 Javascript
javascript代码运行不出来执行错误的可能情况整理
2013/10/18 Javascript
js阻止默认事件与js阻止事件冒泡示例分享 js阻止冒泡事件
2014/01/27 Javascript
javascript实现多级联动下拉菜单的方法
2015/02/06 Javascript
ajax+jQuery实现级联显示地址的方法
2015/05/06 Javascript
JavaScript实现对下拉列表值进行排序的方法
2015/07/15 Javascript
jQuery 选择同时包含两个class的元素的实现方法
2016/06/01 Javascript
JavaScript实现窗口抖动效果
2016/10/19 Javascript
BootStrap表单验证实例代码
2017/01/13 Javascript
RequireJS 依赖关系的实例(推荐)
2017/01/21 Javascript
javascript事件的传播基础实例讲解(35)
2017/02/14 Javascript
JS小球抛物线轨迹运动的两种实现方法详解
2017/12/20 Javascript
[43:24]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第二场 12.12
2020/12/17 DOTA
python中的json总结
2018/10/11 Python
基于python实现高速视频传输程序
2019/05/05 Python
基于TensorFlow中自定义梯度的2种方式
2020/02/04 Python
pycharm 2018 激活码及破解补丁激活方式
2020/09/21 Python
python音频处理的示例详解
2020/12/23 Python
html5+svg学习指南之SVG基础知识
2014/12/17 HTML / CSS
巴西箱包、背包、钱包和旅行配件购物网站:Inovathi
2019/12/14 全球购物
体育专业个人求职信范文
2013/12/27 职场文书
退伍老兵事迹材料
2014/01/31 职场文书
大学生期末自我鉴定
2014/02/01 职场文书
超市国庆节促销方案
2014/02/20 职场文书
工程采购员岗位职责
2014/03/09 职场文书
大学三年计划书范文
2014/04/30 职场文书
幼儿园大班教学反思
2016/03/02 职场文书
德劲DE1108畅想
2021/04/22 无线电
python实现学生信息管理系统(面向对象)
2022/06/05 Python
基于Redission的分布式锁实战
2022/08/14 Redis